智慧型指標和陣列

2021-08-23 14:11:23 字數 945 閱讀 4521

**:

預設情況下,std::shared_ptr會呼叫delete來清空記憶體。當使用new 分配記憶體時,需要呼叫delete 來釋放記憶體,否則會有記憶體洩露。

可以通過以下**來自定義釋放記憶體的函式:

1 template< typename t >

2 struct array_deleter

3 8 };

通過以下**來宣告std::shared_ptr指標:

std::shared_ptrsp(new int[10], array_deleter());
此時,shared_ptr可正確的呼叫delete。

在c++11中,可以使用 std::default_delete代替上面自己寫的array_deleter:

std::shared_ptrsp(new int[10], std::default_delete());
也可以使用一下的lambda表示式來自定義刪除函式

std::shared_ptrsp(new int[10], (int *p) );
實際上,除非需要共享目標,否則unique_ptr更適合使用陣列:

std::unique_ptrup(new int[10]); // this will correctly call delete
ps,上面**可以正確的分配空間,但是空間內的值都沒有初始化。如果需要預設初始化為0,可以使用下面的**:

std::unique_ptrup(new int[10]()); // this will correctly call delete  初始化為0
ps2,使用vector時,可以通過fill函式來將vector中所有元素置為預設值。

vectordata(datalen);

std::fill(data.begin(), data.end(), 0);

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

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

boost庫 陣列智慧型指標scoped array

學習過c 的開發人員,都知道在c 裡陣列指標與一般的指標是有區別的。比如使用陣列形式分配的記憶體,就需要使用陣列的形式刪除。但初學開發的開發人員,往往會忘記這點,在我過去10多年的軟體 審查過程裡,經常發現這點,如下面所示 char pbuf new char 256 這裡使用 delete pbu...

c c 陣列的智慧型指標 使用

1,unique ptr的陣列智慧型指標,沒有 和 操作,但支援下標操作 2,shared ptr的陣列智慧型指標,有 和 操作,但不支援下標操作,只能通過get 去訪問陣列的元素。3,shared ptr的陣列智慧型指標,必須要自定義deleter 小例子 include include incl...