指標(3)智慧型指標總覽

2021-06-22 13:33:37 字數 827 閱讀 4661

scoped_ptr不能被複製,shared_ptr能複製:

使用boost::scoped_ptr的時候必須注意,它不允許進行複製操作,一旦宣告了乙個指向某記憶體空間的指標,那麼就不可以通過another_p = p;的方式來分配記憶體空間的新所有權。 

auto_ptr不能指定刪除器(因而不能管理記憶體之外的其他資源),shared_ptr能指定刪除器

[上述common requirements小節摘自boost文件]

設計哲學:

使用scoped_ptr可以讓閱讀你**的程式設計師知道你的意圖--僅僅在當前作用域中使用raii機制,並且放棄轉讓所有權。

避免std::auto_ptr在轉讓所有權語義上的陷阱,同時也讓程式設計師知道此資源不可轉讓。

常用於handle/body(pimpl)慣用法,簡化資源管理。

不提供release()成員是為了保證scoped_ptr的所有權不會被轉移,防止引起歧義。

key:scoped_ptr比shared_ptr有著更強的暗示,暗示其作用域物件所有權,更好的幫助其他程式設計師維護既有**

scoped_ptr提供了raii機制,是良好的c++程式設計風格。

scoped_ptr可以在絕大多數情況下取代std::auto_ptr,而餘下的情況則可以使用shared_ptr。

不可以用作stl容器,因為其不支援copy語義。

scoped_ptr非常適合實現pimpl慣用法。

scoped_ptr不可以託管動態分配的陣列,請使用scoped_array。

智慧型指標3

include include using namespace std define test smartptr class stub class sentry sentry private int lock template class refcountingtraits void unrefer...

3 智慧型指標std auto ptr

std auto ptr 對於編譯器來說,智慧型指標實質是乙個棧物件,而並非指標型別。智慧型指標通過建構函式獲取堆記憶體的管理所有權,而在其生命期結束時,再通過析構函式釋放由它所管理的堆記憶體。所有智慧型指標都過載了 operator 操作符,直接返回物件的引用,用以操作物件。訪問智慧型指標原來的方...

智慧型指標 強弱智慧型指標

在平時編寫 的時候經常會用到new來開闢空間,而我們開闢出來的空間必須得手動去delete他,但是如果程式設計師忘記去手動釋放那邊會出現乙個麻煩的問題,記憶體洩漏!或者是一塊記憶體被多個函式同時使用時,如果其中乙個函式不知道還有其他人也在使用這塊記憶體而釋放掉的話同樣也會引起程式的崩潰。引起記憶體洩...