将shared_ptr分配给weak_ptr

时间:2019-03-18 03:37:16

标签: c++ shared-ptr weak-ptr

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

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

但是,当我执行rw.expired()时,它显示已过期,表示它为空。有什么建议可以解决我的问题吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

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仍然存在时不会过期。