gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:03 24 4
gpt4 key购买 nike

除此之外,C++ 入门(第 5 版)中关于动态内存的第 (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's C++ Primer 中的 shared_ptr 和 unique_ptr 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com