【问题标题】:shared_ptr assignment - is custom deleter copied too?shared_ptr 分配 - 是否也复制了自定义删除器?
【发布时间】:2015-09-30 15:27:26
【问题描述】:

许多文档都指出在分配时复制了托管对象。似乎没有人谈论删除器或控制块。

例如:

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

b = a;

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

【问题讨论】:

    标签: c++ shared-ptr


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多