我经常使用类似于下面的代码向C++对象添加一个Empty方法来清除内部状态。
class Foo
{
private:
int n_;
std::string str_;
public:
Foo() : n_(1234), str_("Hello, world!")
{
}
void Empty()
{
*this = Foo();
}
};这似乎比在构造函数中复制代码要好,但我想知道当想要清除对象时,*this = Foo()是否是一种常见的方法?等着在背后咬我有什么问题吗?有没有其他更好的方法来实现这类事情?
发布于 2009-01-12 17:42:07
我会让构造函数调用我的函数:
class Foo
{
private:
int n_;
std::string str_;
public:
Foo()
{
Reset();
}
void Reset()
{
n_ = 1234;
str_ = "Hello, world!";
}
};是的,您不必要地先将字符串初始化为空字符串,然后再进行赋值,但这一点要清楚得多。
发布于 2009-01-12 18:02:30
潜在的问题?你怎么知道*这真的是一个Foo?
发布于 2009-01-12 18:30:27
使用这个Empty方法所做的事情,本质上与手动将一个新构造的对象赋给一个变量( Empty函数所做的事情)相同。
就我个人而言,我会删除空方法,并将该方法的所有使用替换为:
// 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上的真实情况,这个名称也不是最好的选择。
如果调用者真的想要一个干净的对象-他自己构造对象就没有问题。
https://stackoverflow.com/questions/436265
复制相似问题