用新对象清除对象?

时间:2013-06-06 09:19:04

标签: c++ variables swap

我有:

MyClass myObject1( var1, var2 );
myObject1.someMethod(); //> Changes the interal state of the object

现在,我想在myObject1分配一个MyClass类型的“干净”对象。类似的东西:

myObject1 = MyClass( otherVar1, otherVar2 );

不使用指针(和/或unique_ptr)有没有快速/有效的方法呢?

1 个答案:

答案 0 :(得分:3)

第1点。在您的探查器中有数据表明您应该这样做之前,请不要担心性能。否则称为过早优化,这是一件坏事。首先选择最简单的设计。

第2点。在C ++ 11中,您可以为MyClass编写一个移动赋值运算符,如果这在您的情况下有意义(很难说不知道MyClass的定义)。

然而,更好的想法将使用诸如unique_ptr之类的RAII包装作为您的类的成员,并让编译器生成的移动赋值运算符执行成员移动并将工作委托给您的成员的移动分配操作员。然后,unique_ptr的移动赋值运算符将负责做正确的事情。

通过这种方式,您不必费心遵循三条规则,五条规则或其他方面,您将获得最佳性能,并且(作为奖励)异常安全。 避免定义自己的特殊成员函数,并习惯于遵循Rule of Zero

As mentioned by juanchopanza in the comments,在C ++ 03中你可以提供一个无法抛出swap()函数 - 但是,根据你的类的定义,这可能会有所帮助,也可能没有帮助。