template< class y >
shared_ptr
(const shared_ptr
& r ) noexcept;
// 左值拷貝構造
shared_ptr
( shared_ptr&& r ) noexcept;
// 右值拷貝構造
shared_ptr& operator=
(const shared_ptr& r ) noexcept;
// 賦值運算子
t*get()
const noexcept;
// 返回原始指標
long
use_count()
const noexcept // 返回引用計數值
shared_ptr
sp(new son
(2222
,"ddddddddd"))
;shared_ptr
sp2(new son
(2222
,"ddddddddd"))
;sp = sp2;
// 支援複製操作,sp原來物件釋放,sp2引用計數+1
cout << sp2.
use_count()
<< endl;
// use_count返回引用計數值 為2
// 建構函式時explicit的
shared_ptr<
int>
clone
(int p)
shared_ptr sp3 = make_shared
(2432
,"dfaf");
// 類似emplace,直接傳建構函式的引數
sp3->
print()
; cout << sp3.
unique()
<< endl;
// 返回true:1
shared_ptr<
int>
ap(new int(2
));// 1
shared_ptr<
int>
ap2(ap)
;// 拷貝構造,2
shared_ptr<
int> ap3;
ap3 = ap2;
// 複製操作 3
cout << ap3.
use_count()
<< endl;
//3
shared_ptr<
int>
sp(new int[3
],(int
*p))
;
shared_ptr p
// 自定義刪除器d
p.reset
// p接管q的資源,同時指定刪除器為d2
class base
; virtual ~
base()
public:
int age_;
string name_;};
auto del =
(base *base)
// 與unique_ptr的區別
shared_ptr
sp(new base
(333
,"***"
), del)
; unique_ptrdecltype
(del)
>
up(new base
(333
,"***"
), del)
:
shared_ptr sp3 = make_shared
(2432
,"dfaf");
shared_ptr
sp4(std::
move
(sp3));
cout << sp4.
use_count()
<< endl;
// 1
cout << sp3.
use_count()
<< endl;
// 0
make_shared總是會建立乙個控制塊,從unique_ptr物件、auto_ptr物件出發建立乙個shared_ptr時也會建立乙個控制塊,當使用裸指標來構造乙個shared_ptr時也會建立乙個控制塊。
備註:
class base
; virtual ~
base()
public:
int age_;
string name_;};
class son : public base ;~
son()}
;// 如果父類析構不virtual,也會多型釋放記憶體
shared_ptr
p1(new son(2
,"***"))
;
c 智慧型指標介紹之auto ptr
作用及特性 智慧型指標的引用,主要是為了解決異常發生時產生記憶體洩漏。auto ptr在建立的時候獲取物件的所有權,在析構的時候,釋放物件記憶體空間 raii1 過載了函式的 和 運算子,使得其操作看起來像個內建指標。沒有使用引用計數,在複製構造或賦值的時候發生所有權轉移 包含的操作 拷貝構造 賦值...
C 之智慧型指標
本文發表於1999年10月份的c c users journal,17 10 1.為什麼稱它為 自動 指標?auto ptr只是眾多可能的智慧型指標之一。許多商業庫提供了更複雜的智慧型指標,用途廣泛而令人驚異,從管理引用的數量到提供先進的 服務。可以把標準c auto ptr看作智慧型指標的ford...
C 之智慧型指標
c 中有四個智慧型指標 auto ptr,shared ptr,weak ptr,unique ptr,其中後三個是c 11支援,並且第乙個已經被c 11棄用。智慧型指標從書面意思來說,就是智慧型。主要是動態記憶體的使用很容易出問題,要在正確的時間正確釋放記憶體是很困難的。有時我們可能忘了釋放記憶體...