shared_ptr和unique_ptr Lippman的C ++入门中的构造函数

时间:2014-04-08 15:58:05

标签: c++ shared-ptr unique-ptr

除此之外,C ++ Primer(第5版)中关于动态内存的第12章提到了shared_ptrunique_ptr上的几个我无法在线找到的构造函数。我正在写这个问题来澄清这两个构造函数的存在。如果确实存在,则在下面询问有关它们的具体问题

  1. shared_ptr<T> p(p2, d):      pshared_ptr p2的副本,但p使用的是     可调用对象d代替delete

    我在这里没有得到删除器的部分:p将指向 与p2相同的基础对象,引用计数得到 增加1.在定义p2时,已经有了delete 指定了自定义删除工具,或使用默认的unique_ptr<T, D> u(d)。什么是 在这里指定一个新删除器的意义?

  2. unique_ptr:指向对象的空T 键入d,使用D(必须是delete类型的对象) shared_ptr

    的地方

    现在,这完全有道理。但是,我发现了一个类似的 unique_ptr的构造函数,但shared_ptr

  3. 没有

    以下是我查看过的资源:

    unique_ptr

    1. http://www.cplusplus.com/reference/memory/shared_ptr/shared_ptr/
    2. http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr
    3. {{1}}:

      1. http://www.cplusplus.com/reference/memory/unique_ptr/unique_ptr/
      2. http://en.cppreference.com/w/cpp/memory/unique_ptr/unique_ptr
      3. 只是想确认它们是否合法?

1 个答案:

答案 0 :(得分:2)

在20.7.2.2中shared_ptr的唯一构造函数我看到接受删除符是接受原始指针或nullptr_t的。

对于unique_ptr,从20.7.1.2看起来你可以编写一个删除类型,其底层typedef将是另一个unique_ptr,但为了保留正确的语义,你必须采取对象本身的所有权,因此更改删除器不一定是一个问题(例如,您可能会立即将其从立即删除更改为返回池)。