除其他外,关于C++Primer中的动态内存(第5版)的第(12)章提到了我在网上找不到的shared_ptr
和unique_ptr
上的几个构造函数。我写这个问题是为了澄清这两个构造函数的存在。如果它们确实存在,有关它们的具体问题已在下方提出
-
shared_ptr<T> p(p2, d)
:p
是shared_ptr
p2
的副本,除了p
使用可调用对象d
代替delete
我在这里没有得到deleter上的部分:
p
将指向与p2
相同的底层对象,并且引用计数得到递增1。在定义p2
时,可能已经指定了自定义删除程序,或使用了默认的delete
。什么是在这里指定一个新的委托人有什么意义? -
unique_ptr<T, D> u(d)
:指向的对象的空unique_ptr
在中使用d
(必须是D
类型的对象)的类型T
delete
所在地现在,这完全有道理。然而,我发现了一个类似的
shared_ptr
的构造函数,但不适用于unique_ptr
以下是我研究过的资源:
shared_ptr
:
- http://www.cplusplus.com/reference/memory/shared_ptr/shared_ptr/
- http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr
unique_ptr
:
- http://www.cplusplus.com/reference/memory/unique_ptr/unique_ptr/
- 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不一定是个问题(例如,您可能会将其从立即删除更改为动态返回池)。