除此之外,C ++ Primer(第5版)中关于动态内存的第12章提到了shared_ptr
和unique_ptr
上的几个我无法在线找到的构造函数。我正在写这个问题来澄清这两个构造函数的存在。如果确实存在,则在下面询问有关它们的具体问题
shared_ptr<T> p(p2, d)
:
p
是shared_ptr
p2
的副本,但p
使用的是
可调用对象d
代替delete
我在这里没有得到删除器的部分:p
将指向
与p2
相同的基础对象,引用计数得到
增加1.在定义p2
时,已经有了delete
指定了自定义删除工具,或使用默认的unique_ptr<T, D> u(d)
。什么是
在这里指定一个新删除器的意义?
unique_ptr
:指向对象的空T
键入d
,使用D
(必须是delete
类型的对象)
shared_ptr
现在,这完全有道理。但是,我发现了一个类似的
unique_ptr
的构造函数,但shared_ptr
以下是我查看过的资源:
unique_ptr
:
答案 0 :(得分:2)
在20.7.2.2中shared_ptr
的唯一构造函数我看到接受删除符是接受原始指针或nullptr_t
的。
对于unique_ptr
,从20.7.1.2看起来你可以编写一个删除类型,其底层typedef将是另一个unique_ptr
,但为了保留正确的语义,你必须采取对象本身的所有权,因此更改删除器不一定是一个问题(例如,您可能会立即将其从立即删除更改为返回池)。