我想了解有關auto_ptr類如何工作的某些細節。假設你有以下課程(我在一個網站上發現了這個人,他解釋了賦值運算符的更精細的點)。試圖瞭解auto_ptr
class TFoo : public TSuperFoo {
auto_ptr<TBar> fBar1;
auto_ptr<TBar> fBar2;
public:
TFoo& TFoo::operator=(const TFoo& that);
// various other method definitions go here...
}
現在執行賦值操作符。
TFoo& TFoo::operator=(const TFoo& that)
{
if (this != &that) {
auto_ptr<TBar> bar1 = new TBar(*that.fBar1);
auto_ptr<TBar> bar2 = new TBar(*that.fBar2);
fBar1 = bar1;
fBar2 = bar2;
}
return *this;
}
他接着說
在這裏,如果第二個新的操作失敗,第一個新TBAR將由auto_ptr的析構函數,當我們退出該功能刪除。但是,如果兩個new都成功了,那麼賦值將會刪除先前指向的對象fBar1和fBar2,並且也會將bar1和bar2清零,以便在我們退出函數時它們的析構函數不會刪除任何內容。
所以我的問題是爲什麼bar1和bar2會被清零?什麼會觸發呢?你不需要像
fBar = bar1.release();
感謝您的任何幫助。
關於'auto_ptr'的唯一理解是它被破壞了,不應該被使用。 –
@CaptainObvlious在某些情況下是完美的。如果你有C++ 11,那麼沒有理由使用它。但在C++ 03中,有時候沒有好的選擇。無論如何,這個問題是一個很好的問題,也適用於'unique_ptr'。 – juanchopanza
您可能想了解[Copy-Swap Idiom](http://stackoverflow.com/q/3279543/10077)。 –