shared_ptr 作业 - 自定义删除器也被复制了吗?
shared_ptr assignment - is custom deleter copied too?
许多文档都指出在分配时复制了托管对象。似乎没有什么是关于删除器或控制块的。
例如:
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;
这将创建对该对象和控制结构的第二个引用,将其引用计数增加到两个。
保存共享对象的唯一引用计数的相同结构也包含删除器。
许多文档都指出在分配时复制了托管对象。似乎没有什么是关于删除器或控制块的。
例如:
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;
这将创建对该对象和控制结构的第二个引用,将其引用计数增加到两个。
保存共享对象的唯一引用计数的相同结构也包含删除器。