關於auto_prt

auto_prt is NOT  copy-constructible and  assignable.。 所以要特別注意:

1. 不能用於STL containers:
http://www.devx.com/tips/Tip/13606

2. 作爲函數參數時:onst reference是智能指針作爲參數傳遞的底線

1)按值傳遞時,函數調用過程中在函數的作用域中會產生一個局部對象來接收傳入的auto_ptr(拷貝構造),這樣,傳入的實參auto_ptr就失去了其對原對象的所有權,而該對象會在函數退出時被局部auto_ptr刪除。如下例:

void f(auto_ptr<int> ap)

{cout<<*ap;}
auto_ptr<int> ap1(new int(0));
f(ap1);
cout<<*ap1;//錯誤,經過f(ap1)函數調用,ap1已經不再擁有任何對象了。

2)引用或指針時,不會存在上面的拷貝過程。但我們並不知道在函數中對傳入的auto_ptr做了什麼,如果當中某些操作使其失去了對對象的所有權,那麼這還是可能會導致致命的執行期錯誤。

結論:const reference是智能指針作爲參數傳遞的底線。

3. 可以用shared_prt代替auto_ptr
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章