C 智慧型指標實踐

2021-10-24 08:34:45 字數 954 閱讀 1393

c++的只能指標有三種型別:shared_ptr,unique_ptr 和 weak_ptr。weak_ptr指向的是shared_ptr物件,但不會增加物件的引用計數。

classa}

;// 方式1:使用內建動態指標初始化智慧型指標

shared_ptrp1(

new a)

;// 方式2:使用make_shared函式進行初始化,注意引數是傳給a的建構函式的

auto p2 = make_shared()

;// 容易與方式1混淆:這種用法一般是錯誤的,如下真實的意思是呼叫乙個接收內建指標a的建構函式去構建乙個智慧型指標。

auto p3 = make_shared

(new a)

;

unique_ptr的初始化與shared_ptr類似,在此不再贅述。說一下unique_ptr的賦值相關問題。

unique_ptru1(

new a)

;auto

u2(u1.

release()

);// 此處不能直接使用u1

// 也可以使用move函式,此時u1和u3的值都為nullptr

auto

u3(std::

move

(u1)

);

u1.reset

(u2.

release()

);// u1已經存在

classa}

;unique_ptr

unique_ptr_test

(unique_ptr u)

intmain()

智慧型指標使用基本規範

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 ...

c 智慧型指標

記得前不久有一次面試被問到智慧型指標的實現,當時對智慧型指標只是聽說但沒有了解過,就亂七八糟地說了一遍。今天寫了一遍智慧型指標,用了引用計數的概念。主要思想就是,用乙個新類對原本需要的型別進行了一層封裝,這個新類中儲存了原本的物件指標和乙個引用計數的指標,之所以全部用指標來儲存,就是因為會出現多個新...