gpt4 book ai didi

c++ - shared_ptr 对象全局删除

转载 作者:行者123 更新时间:2023-11-28 00:00:18 26 4
gpt4 key购买 nike

我想使用像 std 库的 shared_ptr 这样的智能指针,但是在哪里可以删除共享它的每个 shared_ptr 的对象不删除那些指针。

例如,如果我使用 std::shared_ptr

shared_ptr<A> p1 = make_share<A>();
shared_ptr<A> p2 = shared_ptr<A>(p1);
p1.reset();
// now p2 still contain the object of type A
// instead of nullptr

有没有办法做到这一点,或者是否存在一些替代方案?我做错了吗?

最佳答案

当然。 std::shared_ptr 带有 std::weak_ptr ,一个指针,可以指向由一组 std::shared_ptr 管理的对象并检查它是否仍然存在,但不会延长对象的生命周期。

您只需将原始的 std::shared_ptr 保留给您的对象,并将 std::weak_ptr 借给该对象的其他用户。当必须销毁对象时,重置 std::shared_ptr,所有剩余的 std::weak_ptr 将能够知道(它们将返回 null std::shared_ptrs 当用户试图锁定它们时)。

关于c++ - shared_ptr 对象全局删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39596272/

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