2013-06-06 133 views
2

我:用新對象清除對象?

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

現在在某些時候我想分配給myObject1MyClass類型的「乾淨」的對象。喜歡的東西:

myObject1 = MyClass(otherVar1, otherVar2); 

不使用指針(和/或unique_ptr)有任何快速/有效的方式來做到這一點?

+0

什麼意思是快?你的例子全部取決於MyClass的構造函數和MyClass的operator =。 – ForEveR

+0

'MyClass'是否使用指向複製昂貴的數據塊?如果是這樣,請實現一個廉價的交換函數(以及C++ 11的移動拷貝構造函數)。 – juanchopanza

+0

你沒有回答我的問題:-) – juanchopanza

回答

3

點1。直到您的分析器提供的數據表明您應該這樣做之前,不要擔心性能。否則會被稱爲不成熟的優化,這是一件壞事。首先選擇最簡單的設計。

點2。在C++ 11中,如果在你的情況下有意義(很難說不知道MyClass的定義),你可以爲MyClass編寫一個移動賦值運算符。

然而,一個更好的主意是使用RAII包裝如unique_ptr作爲類的成員,並讓編譯器生成的移動賦值運算符做了成員明智之舉和工作委託給移動分配您的會員的運營商。然後,您的unique_ptr的移動分配操作員將負責做正確的事情。

這樣你就不用擔心遵循三法則,五法則或什麼的,你會得到最佳表現,並且(作爲獎勵)異常安全。 避免定義你自己的特殊成員函數,習慣於遵循Rule of Zero

As mentioned by juanchopanza in the comments,在C++ 03中,您可以提供一個無丟包swap()函數 - 但同樣,根據您的類的定義,這可能會也可能無幫助。

+0

一個便宜的,沒有拋出的'swap'可以是一個很好的C++ 03替代移動構造函數。 – juanchopanza

+0

@ juanchopanza:對,我將其添加到答案中。謝謝! –