gpt4 book ai didi

c++ - std::shared_ptr、std::weak_ptr 和控制 block

转载 作者:行者123 更新时间:2023-11-30 00:46:57 25 4
gpt4 key购买 nike

我一直在阅读 std::make_shared最近发挥作用。据我了解 Effective Modern C++本书中,make 函数应该是首选,除非:

  1. 自定义内存管理到位。
  2. 存在内存问题,例如 std::weak_ptr可能比它的 std::shared_ptr 长寿,处理大对象,自定义删除器等。

所以,我明白了std::make_shared只需一次调用即可在堆及其控制 block 上分配一个对象。因此,问题是std::shared_ptr在必须释放控制 block 之前,不能删除 的对象。如果我错了请纠正我,但这是最后一次 std::weak_ptr发行了。因此,std::make_shared如果有活着的可能不合适std::weak_ptr指向它。

但这对大多数对象来说仍然是个问题吗?非大对象释放控制 block 时需要注意吗?可以说,如今内存并不难获得,所以这是否只是大型对象和低内存系统的问题?

我关心的一点是:如果我设计一个使用 std::make_shared 的类, 和 std::weak_ptr以后要用到,我得回去把make函数换成普通的std::shared_ptr<Class>(new Class()) .

最佳答案

这是一个微小的边缘问题,被夸大了。这是一个问题的唯一情况是如果对象很大(相对于可用内存),大小是对象的基本大小(不是析构函数(对象或其任何成员的)可以释放的内存),而弱指针很可能比对象的生命周期长得多。这是一种罕见的案例组合,几乎从不重要。

关于c++ - std::shared_ptr、std::weak_ptr 和控制 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36523380/

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