指標(4)智慧型指標的使用

2021-06-22 05:50:57 字數 1811 閱讀 6540

why 

shared_ptr:

1)如果指標作為類成員時,使用shared_ptr封裝原始指標,解決了複製類物件出現的問題(相較原始指標)。

如果是非記憶體資源(比如:互斥器),可以在構造時再傳乙個刪除器(deleter)引數(shared_ptr可以,auto_ptr不能),因為shared_ptr預設行為是「當引用計數為0時,刪除其所指物」,那不是我們所想要的行為。

2)用於函式內部建立的堆物件的堆疊指標,作為函式返回值

how shared_ptr使用:《effective c++》item29

shared_ptr使用注意:

vs下:

#else

# include // .h to support old libraries w/o - effect is the same

# define boost_assert(expr) assert(expr)

#endif

typename boost::detail::sp_dereference< t >::type operator* () const

class

aprivate

:int

i_;int

j_;};

int  

main()

shared_ptr<

int> p1(

newint

(100)); 

而不是 shared_ptr<

int*> p1(

newint

(100)); 

//編譯錯誤,應該為

a obj;

shared_ptrptr2(&obj);

//執行時

crt錯誤

a obj;

shared_ptrptr1(

newa());

ptr1.reset(&obj);

//執行時

crt錯誤。

//如果是空指標即0,或原指標值,也會引發assert錯誤

how :若要封裝動態陣列,可以使用vector,string,scoped_arry,shared_array//《

effective c++

》電子版

p95shared_ptr<

int> pi(

newint

[1024]); 

//可能會執行時錯誤。因為

shared_ptr

用delete

析構而不是

delete。若要封裝動態陣列,可以使用vector,string,scoped_arry,shared_array

auto_ptrps(

newstring[10]);

//可能會執行時錯誤。因為

auto_ptr

用delete

析構而不是

delete。

若要封裝動態陣列,可以使用vector,string,scoped_arry,shared_array

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

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

智慧型指標使用摘要

1.如果沒有拷貝 賦值等要求,優先選用scoped ptr 2.如果不需要放入容器中 放入容器中的元素型別必須是能拷貝的 優先選用scoped ptr 3.如果不需要自定義刪除器,優先選用scoped ptr 4.盡量不要用scoped array管理new出來的陣列,改用vector代替 5.只能...

C 智慧型指標使用

由於 c 語言沒有自動記憶體 機制,程式設計師每次 new 出來的記憶體都要手動 delete。程式設計師忘記 delete,流程太複雜,最終導致沒有 delete,異常導致程式過早退出,沒有執行 delete 的情況並不罕見。std auto ptr boost scoped ptr boost ...