gpt4 book ai didi

c++ - std::weak_ptrs 是否会影响 std::make_shared 分配的内存何时被释放?

转载 作者:IT老高 更新时间:2023-10-28 21:47:48 24 4
gpt4 key购买 nike

如果我调用 std::make_shared<T> (而不仅仅是显式分配 shared_ptr<T>)那么出于性能原因,我希望引用计数与 T 的实例一起分配在内存中。一切顺利。

但如果我有 weak_ptr引用同一个对象的实例,大概他们需要访问该引用计数,以了解该对象是否仍然存在。

因此,当 T 的实例的最后一个 shared_ptr 被销毁时,对系统的幼稚理解会暗示它无法释放存储 T 的内存,因为weak_ptrs 仍然需要访问该计数。

好像有一个separate weak reference counter从理论上讲,它可以与 T 的实例分开保存,以便可以在弱引用仍然存在的情况下销毁 T 并释放内存。但随后我们又回到了 2 个单独的分配,从而阻碍了 make_shared 的好处。 .

我想我在这里误解了一些东西。通过std::make_shared构造的实例如何分配内存?当弱引用存在时释放?

最佳答案

如果您使用 make_shared 并且实现对对象和引用计数使用单个分配,则在释放所有引用(强引用和弱引用)之前无法释放该分配。

但是,对象会在所有强引用被释放后被销毁(不管是否还有弱引用)。

关于c++ - std::weak_ptrs 是否会影响 std::make_shared 分配的内存何时被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535827/

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