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