2015-07-12 63 views
2

許多文檔指出,在分配時,託管對象被複制。似乎沒有任何關於刪除者或控制塊的討論。shared_ptr賦值 - 是否也複製了定製刪除器?

例如:

std::shared_ptr<A> a(new A, D()); 
std::shared_ptr<A> b; 

b = a; 

如果b是最後剩下的所有者和b超出範圍,將定製刪除d()被調用?

回答

1

是的。刪除者在創建對象時設置。共享指針管理具有刪除程序的控制結構中的引用計數。

std::shared_ptr<A> a(new A, D()); 

此行創建一個新的共享對象,其中包含一個控制結構,其中包含一個刪除器和一個引用計數。它還創建一個指向該對象和控制結構的共享指針。

std::shared_ptr<A> b; 
b = a; 

這會創建對該對象和控制結構的第二個引用,將其引用計數顛倒爲兩個。

保存共享對象的唯一引用計數的相同結構也包含刪除程序。

相關問題