首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清空C++对象

清空C++对象
EN

Stack Overflow用户
提问于 2009-01-12 17:38:20
回答 10查看 7.3K关注 0票数 4

我经常使用类似于下面的代码向C++对象添加一个Empty方法来清除内部状态。

代码语言:javascript
复制
class Foo
{
private:
    int n_;
    std::string str_;
public:
    Foo() : n_(1234), str_("Hello, world!")
    {
    }

    void Empty()
    {
        *this = Foo();
    }
};

这似乎比在构造函数中复制代码要好,但我想知道当想要清除对象时,*this = Foo()是否是一种常见的方法?等着在背后咬我有什么问题吗?有没有其他更好的方法来实现这类事情?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-01-12 17:42:07

我会让构造函数调用我的函数:

代码语言:javascript
复制
class Foo
{
private:
    int n_;
    std::string str_;
public:
    Foo()
    {
        Reset();
    }

    void Reset()
    {
        n_ = 1234;
        str_ = "Hello, world!";
    }
};

是的,您不必要地先将字符串初始化为空字符串,然后再进行赋值,但这一点要清楚得多。

票数 11
EN

Stack Overflow用户

发布于 2009-01-12 18:02:30

潜在的问题?你怎么知道*这真的是一个Foo?

票数 9
EN

Stack Overflow用户

发布于 2009-01-12 18:30:27

使用这个Empty方法所做的事情,本质上与手动将一个新构造的对象赋给一个变量( Empty函数所做的事情)相同。

就我个人而言,我会删除空方法,并将该方法的所有使用替换为:

代码语言:javascript
复制
// let's say, that you have variables foo and pfoo - they are properly initialized.
Foo foo, *pfoo;

// replace line "foo.Empty()" with:
foo = Foo();

// replace line "pfoo->Empty()" with:
delete pfoo;
pfoo = new Foo();
// or
*pfoo = Foo();

我真的看不出这个空方法有什么好处。它隐藏了对象在witch上的真实情况,这个名称也不是最好的选择。

如果调用者真的想要一个干净的对象-他自己构造对象就没有问题。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/436265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档