【发布时间】:2019-07-16 11:36:35
【问题描述】:
c++ how to assert that all std::shared_ptr in a vector are referring to something 中解释了使用 assert 来检查 shared_ptr 是否不是 nullPtr,但我没有找到合适的方法来检查 weak_ptr。我尽量避免将其转换为 shared_ptr 所以请让我知道您的其他解决方案。
【问题讨论】:
-
weak_ptr::expired。 en.cppreference.com/w/cpp/memory/weak_ptr/expired
-
如果您的意思是使用
assertmacro,请注意它在典型的发布版本中被“禁用”(扩展为无)。如果它失败,它也会“崩溃”你的程序。因此,它不应该真正用于生产构建中的运行时检查。 -
小心:
shared_ptr不能成为nullPtr(如果我正确阅读了该名称的意图)。它可以持有一个空指针。对于weak_ptr,有两种可能的方式它可能不引用实际内存:与之关联的shared_ptrs 可能包含一个空指针,或者它可能不与任何shared_ptrs 关联。因此,没有什么是“相同的”,而是有两件事是相似的。你必须说出你的意思,否则你会得到猜测而不是实际答案。 -
@AF_cpp 您可以发表您的评论作为答案,以便我批准吗?
标签: c++ assert smart-pointers weak-ptr