2
許多文檔指出,在分配時,託管對象被複制。似乎沒有任何關於刪除者或控制塊的討論。shared_ptr賦值 - 是否也複製了定製刪除器?
例如:
std::shared_ptr<A> a(new A, D());
std::shared_ptr<A> b;
b = a;
如果b是最後剩下的所有者和b超出範圍,將定製刪除d()被調用?
許多文檔指出,在分配時,託管對象被複制。似乎沒有任何關於刪除者或控制塊的討論。shared_ptr賦值 - 是否也複製了定製刪除器?
例如:
std::shared_ptr<A> a(new A, D());
std::shared_ptr<A> b;
b = a;
如果b是最後剩下的所有者和b超出範圍,將定製刪除d()被調用?
是的。刪除者在創建對象時設置。共享指針管理具有刪除程序的控制結構中的引用計數。
std::shared_ptr<A> a(new A, D());
此行創建一個新的共享對象,其中包含一個控制結構,其中包含一個刪除器和一個引用計數。它還創建一個指向該對象和控制結構的共享指針。
std::shared_ptr<A> b;
b = a;
這會創建對該對象和控制結構的第二個引用,將其引用計數顛倒爲兩個。
保存共享對象的唯一引用計數的相同結構也包含刪除程序。