c++ - Lippman 的 C++ Primer 中的shared_ptr 和 unique_ptr 构造函数

标签 c++ shared-ptr unique-ptr

除此之外,C++ Primer(第五版)中的动态内存章节(12)提到了 shared_ptr 上的几个构造函数。和unique_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) :空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

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

最佳答案

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

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

关于c++ - Lippman 的 C++ Primer 中的shared_ptr 和 unique_ptr 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942200/

相关文章:

c++ - 在嵌套类中访问变量的问题

c++ - 我怎样才能打破这个 std::shared_ptr 引用循环?

c++ - 如何安全地将 unique_ptr 与可以返回 NULL 的函数一起使用?

c++ - 可变参数模板扩展、继承和 std::unique_ptr

c++ - 打破shared_ptr和unique_ptr之间的循环依赖

c++ - 如何在 C++ 中运行剪辑?

c++ - 如何在编译时检查类型

c++ - QMainWindow : No Such File Or Directory

c++ - 查找 shared_ptr 的引用计数增加的位置

C++ shared_ptr 和内置指针