除此之外,C++ Primer(第五版)中的动态内存章节(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
:
- 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
唯一接受删除器的构造函数是接受原始指针或 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/