2

我有:

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

现在在某个时候,我想分配给myObject1类型为“干净”的对象MyClass。就像是:

myObject1 = MyClass( otherVar1, otherVar2 );

不使用指针(和/或unique_ptr)有什么快速/有效的方法吗?

4

1 回答 1

3

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

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

但是,一个更好的主意是使用 RAII 包装器,例如unique_ptr您的类的成员,并让编译器生成的移动赋值运算符执行成员明智的移动并将工作委托给您的成员的移动赋值运算符。然后,您的移动赋值运算符unique_ptr将负责做正确的事情。

这样您就不必费心遵循三规则、五规则或诸如此类的规则,您将获得最佳性能,并且(作为奖励)异常安全。避免定义自己的特殊成员函数,并习惯于遵循零规则

正如 juanchopanza 在评论中提到的那样,在 C++03 中,您可以提供一个无抛出swap()函数 - 但同样,这可能会或可能不会有帮助,具体取决于您的类的定义。

于 2013-06-06T09:21:42.780 回答