gpt4 book ai didi

c++ - weak_ptr、make_shared 和内存释放

转载 作者:IT老高 更新时间:2023-10-28 22:04:46 25 4
gpt4 key购买 nike

shared_ptr 的控制 block 在至少存在一个 weak_ptr 时保持事件状态。如果共享指针是使用 make_shared 创建的,则意味着对象的整个内存都保持分配状态。 (对象本身已被正确销毁,但由于控制 block 和对象的内存被分配在一个 block 中,就像 make_shared 所做的那样,它们只能一起被释放。)

我的理解正确吗?

似乎这种行为代表了一个问题,例如在著名的 "cache example" .对象的内存将被永久分配。

它在任何实际情况下都有问题吗?在这种情况下(大型对象和使用 weak_ptrs 的意图)是否应使用构造函数创建 shared_ptr

最佳答案

Is my understanding correct?

是的。如果您的 weak_ptr 的生命周期明显超过(大)对象并且您的内存紧张,那么避免 make_shared 可能是有益的。

然而,这里的“大”是由 sizeof 来衡量的,许多概念上的“大”对象(例如,大多数标准容器,除了 std::array)是从这个指标来看非常小,因为它们分配了额外的内存来存储它们的内容,一旦对象被销毁,这些内存就会被释放。

关于c++ - weak_ptr、make_shared 和内存释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32113594/

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