C 智慧型指標會引起異常的幾種情況

2021-10-07 19:50:21 字數 344 閱讀 2224

1,當兩個物件相互使用shared_ptr成員變數指向對方,會造成迴圈引用,引用計數失效,從而導致記憶體洩露。解決方式:使用weak_ptr弱指標,從而不會修改引用計數的值,其類似乙個普通指標,但不指向引用計數的共享記憶體,但是其可以檢測到所管理的物件是否已經被釋放,從而避免野指標非法訪問。

2,不使用相同的裸指標初始化多個智慧型指標

3,不delete get()返回的指標

4,不使用get()初始化或reset()初始化另乙個智慧型指標

5,如果你使用get()返回的指標,當最後以後個智慧型指標被釋放的時候,你的指標變為無效值

6,如果你使用智慧型指標管理的資源不是new分配的記憶體,記住傳遞給他乙個刪除器

C 異常 與智慧型指標

void func1 上面是個很露骨的 異常不安全 的例子。一旦發生異常,p申請的記憶體將得不到釋放。乙個簡單的辦法是 int p new int 1024 trycatch delete p 還有種方法是定義乙個簡單的類ptr,它含有乙個指標成員。該類的析構函式會釋放這個指標所指物件的記憶體。vo...

C 的智慧型指標

1 在可以使用 boost 庫的場合下,拒絕使用 std auto ptr,因為其不僅不符合 c 程式設計思想,而且極容易出錯。2 在確定物件無需共享的情況下,使用 boost scoped ptr 當然動態陣列使用 boost scoped array 3 在物件需要共享的情況下,使用 boost...

C 的智慧型指標

每日面經 10.14 c 的智慧型指標 想要弄清楚智慧型指標就要明白它為什麼會產生,動態管理 動態陣列 動態記憶體分配等都需要在堆上申請一塊記憶體去儲存自己的東西。你可能會覺得你自己用不到,我隨便舉乙個栗子 比如說你下午要去買水果,但是不知道自己想買多少水果,但是由於現在必須出門,所以你要帶多大的口...