C 智慧型指標與容器

2021-10-09 19:55:46 字數 527 閱讀 3826

1,智慧型指標預設刪除了複製建構函式,所以在使用智慧型指標過程中一旦無意中用到了其複製建構函式,便會出現c2280的錯誤,顯示引用已經刪除的函式。

2,標準容器中存放的元素為智慧型指標時,應該返回為這個容器的引用,且最好是常引用,若是直接返回整個容器,便會呼叫複製建構函式;當vector使用resizer擴容時,會將對應的容器元素預設構造,那麼std::unique_ptr預設構造會產生乙個為null的指標,智慧型指標便不再生效,在使用前一定要初始化,出現嘗試引用已刪除的函式。

3,返回智慧型指標時,可用std::move轉換,若是直接返回區域性構建的智慧型指標便是呼叫預設建構函式。std::move並不能移動任何東西,它唯一的功能是將乙個左值強制轉化為右值引用,繼而可以通過右值引用使用該值,以用於移動語義。std::move是將物件的狀態或者所有權從乙個物件轉移到另乙個物件,只是轉移,沒有記憶體的搬遷或者記憶體拷貝所以可以提高利用效率,改善效能.。

4,返回整個智慧型指標的容器時,是一層淺拷貝,只是返回了容器的位址,但容器內的智慧型指標沒有複製建構函式,所以是共用的一塊位址,當源容器銷毀時,就會出現錯誤

C 異常 與智慧型指標

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

c 智慧型指標

auto prt 它是 它所指向物件的擁有者 所以當自身物件被摧毀時候,該物件也將遭受摧毀,要求乙個物件只有乙個擁有者,注意 auto prt 不能使用new 來分配物件給他 include include using namespace std template void bad print au...

c 智慧型指標

很久沒寫部落格了,不知道如何表達了,哈哈.我先介紹一下深淺拷貝.class copy 此時a.ptr和b.ptr指向同乙個物件,當我們delete a.ptr時 b.ptr所指向的物件已經不存在了,要是我們引用b.ptr指向的物件也就會出問題了.深拷貝 把a.ptr所指向的物件拷貝乙份給b.ptr ...