许多文档都指出,在分配时会复制托管对象。似乎没有任何关于删除器或控制块的讨论。
例如:
std::shared_ptr<A> a(new A, D());
std::shared_ptr<A> b;
b = a;
如果b是剩下的最后一个所有者而且b超出范围,是否会调用自定义删除器D()?
答案 0 :(得分:1)
是。创建对象时设置删除器。共享指针管理具有删除器的控制结构中的引用计数。
std::shared_ptr<A> a(new A, D());
此行创建一个新的共享对象,其控件结构包含一个删除器和一个引用计数。它还创建了一个指向该对象和控制结构的共享指针。
std::shared_ptr<A> b;
b = a;
这将创建对该对象和控件结构的第二个引用,将其引用计数增加到两个。
保存共享对象的唯一引用计数的相同结构也包含删除器。