共享 PTR - shared_ptr 和 unique_ptr Lippman C++入门中的构造函数



除其他外,关于C++Primer中的动态内存(第5版)的第(12)章提到了我在网上找不到的shared_ptrunique_ptr上的几个构造函数。我写这个问题是为了澄清这两个构造函数的存在。如果它们确实存在,有关它们的具体问题已在下方提出

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

    我在这里没有得到deleter上的部分:p将指向与p2相同的底层对象,并且引用计数得到递增1。在定义p2时,可能已经指定了自定义删除程序,或使用了默认的delete。什么是在这里指定一个新的委托人有什么意义?

  2. unique_ptr<T, D> u(d):指向的对象的空unique_ptr在中使用d(必须是D类型的对象)的类型Tdelete 所在地

    现在,这完全有道理。然而,我发现了一个类似的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的唯一接受deleter的构造函数是接受原始指针或nullptr_t的构造函数。

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

相关内容

  • 没有找到相关文章

最新更新