c 基礎 智慧型指標

2021-07-30 02:41:49 字數 1353 閱讀 6087

設計原理:

將基本型別指標封裝為類物件指標(這個類肯定是個模板,以適應不同基本型別的需求),並在析構函式裡編寫delete語句刪除指標指向的記憶體空間。

auto_ptr

則c++會把m_example所指向的記憶體**,使m_example1 的值為null,所以在c++中,應絕對避免把auto_ptr放到容器中。即應避免下列**:

vector>m_example;

當對容器操作的時候,賦值傳遞會使容器中多個元素被置為null,而這不是我們想看到的。

unique_ptr

避免了指標指向有效資料的問題,會出現編譯錯誤提示,即:

unique_ptr pu1(new

string ("hello world"));

unique_ptr pu2;

pu2 = pu1;      // not allowed

unique_ptrpu3;

pu3= unique_ptr(new string("yo!"));  

//allowed

將乙個unique_ptr賦給另乙個時,如果源unique_ptr是個臨時右值,編譯器允許這樣做;如果源unique_ptr將存在一段時間,編譯器將禁止這樣做

還可以用std::move()將乙個unique_ptr賦給另乙個

unique_ptr ps1, ps2;
ps1 = demo("hello");
ps2 = move(ps1);
ps1 = demo("alexia");
cout << *ps2 << *ps1 << endl;
另外, 可將unique_ptr儲存到stl容器,只要不呼叫將乙個unique_ptr複製或賦給另乙個的相關演算法(如sort())

shared_ptr

shared_ptr

和auto_ptr

最大的區別就是,

shared_ptr

解決了指標間共享物件所有權的問題,也就是

auto_ptr

中的賦值的奇怪問題。所以滿足了容器的要求,可以用於容器中。

傳送門

c 基礎 使用智慧型指標

三個智慧型指標模板 auto ptr unique ptr和shard ptr 都定義了類似指標的物件 c 11已將auto ptr摒棄 可以將new獲得 直接或間接 的位址賦給這種物件。當智慧型指標過期時,其析構函式將使用delete來釋放記憶體。因此,如果將new返回的位址賦給 這些物件,將無需...

c 智慧型指標基礎詳解

在現代 c 程式設計中,標準庫包含了智慧型指標 smart pointers 智慧型指標用來確保程式不會出現記憶體和資源的洩漏,並且是 異常安全 exception safe 的。智慧型指標定義在標頭檔案 memory 裡的命名空間 std 中。它對於資源獲取即初始化 raii,resource a...

c 智慧型指標

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