将共享_ptr分配给neek_ptr

Assigning shared_ptr to weak_ptr

本文关键字:ptr neek 分配 共享      更新时间:2023-10-16

我想将构造的shared_ptr分配给feek_ptr:

std::weak_ptr<void> rw  = std::shared_ptr<void>(operator new(60), [](void *pi) { operator delete(pi); });

但是,当我做rw.expired()时,它显示过期意味着它是空的。我出错了什么建议?

预先感谢。

std::shared_ptr的目的是在最后一个共享指针被销毁或重新分配到其他地方时释放托管对象。您创建了一个临时共享的PTR,将其固定到std::weak_ptr,然后在表达式结束时被破坏。您需要保持它的活力:

auto shared = std::shared_ptr<void>(operator new(60), [](void *pi) { operator delete(pi); });
std::weak_ptr<void> rw  = shared;

现在rw至少在shared还活着时不会过期。