【问题标题】:How to use assert to check whether a weak_ptr is nullptr如何使用assert来检查weak_ptr是否为nullptr
【发布时间】: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 所以请让我知道您的其他解决方案。

【问题讨论】:

  • 如果您的意思是使用assert macro,请注意它在典型的发布版本中被“禁用”(扩展为无)。如果它失败,它也会“崩溃”你的程序。因此,它不应该真正用于生产构建中的运行时检查。
  • 小心:shared_ptr 不能成为 nullPtr(如果我正确阅读了该名称的意图)。它可以持有一个空指针。对于weak_ptr,有两种可能的方式它可能不引用实际内存:与之关联的shared_ptrs 可能包含一个空指针,或者它可能不与任何shared_ptrs 关联。因此,没有什么是“相同的”,而是有两件事是相似的。你必须说出你的意思,否则你会得到猜测而不是实际答案。
  • @AF_cpp 您可以发表您的评论作为答案,以便我批准吗?

标签: c++ assert smart-pointers weak-ptr


【解决方案1】:

如果要检查引用的模型是否已经被删除或者弱引用是否为空-> 使用 std::weak_ptr::expired()。

参考文档:https://en.cppreference.com/w/cpp/memory/weak_ptr/expired

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2018-01-12
    • 2020-12-20
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    相关资源
    最近更新 更多