【问题标题】:shared_ptr and unique_ptr Constructors in Lippman's C++ PrimerLippman C++ Primer 中的 shared_ptr 和 unique_ptr 构造函数
【发布时间】:2014-04-08 15:58:05
【问题描述】:

除其他外,关于 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。什么是 在这里指定一个新的删除器有什么意义?

  2. unique_ptr<T, D> u(d): Null unique_ptr 指向的对象 类型 T 使用 d(必须是 D 类型的对象) delete的地方

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

以下是我查看的资源:

shared_ptr:

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

unique_ptr:

  1. http://www.cplusplus.com/reference/memory/unique_ptr/unique_ptr/
  2. http://en.cppreference.com/w/cpp/memory/unique_ptr/unique_ptr

只是想确认它们是否合法?

【问题讨论】:

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


    【解决方案1】:

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

    对于unique_ptr,从 20.7.1.2 开始,您似乎可以构造一个删除器类型,其底层 typedef 将是另一个 unique_ptr,但为了保留正确的语义,您必须获得该对象的所有权本身,因此更改删除器不一定是问题(例如,您可以将其从立即删除更改为即时返回池)。

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 2016-07-21
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 2015-06-17
      • 2021-06-01
      • 1970-01-01
      相关资源
      最近更新 更多