shared_ptr赋值 - 是否也复制了自定义删除器?

时间:2015-07-12 06:50:11

标签: c++ shared-ptr

许多文档都指出,在分配时会复制托管对象。似乎没有任何关于删除器或控制块的讨论。

例如:

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

b = a;

如果b是剩下的最后一个所有者而且b超出范围,是否会调用自定义删除器D()?

1 个答案:

答案 0 :(得分:1)

是。创建对象时设置删除器。共享指针管理具有删除器的控制结构中的引用计数。

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

此行创建一个新的共享对象,其控件结构包含一个删除器和一个引用计数。它还创建了一个指向该对象和控制结构的共享指针。

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

这将创建对该对象和控件结构的第二个引用,将其引用计数增加到两个。

保存共享对象的唯一引用计数的相同结构也包含删除器。