首页 > 解决方案 > 如何理解对象已被破坏?

问题描述

我有一些代码:

void some_function(object *o)
{
    some_other_function(o);
    /* some actions with o */
}

一切都很好,但在某些情况下some_other_function可能会破坏o. 我怎样才能检查它some_function以避免分段错误?

我认为该对象已设置为NULL但从调试器中检查它,我意识到它不是。

标签: c++

解决方案


唯一的方法是阅读some_other_function. 在某些情况下,即使这样可能还不够。仅通过查看指针无法知道该指针是否指向有效的东西。

这是您应该对所有拥有的指针使用智能指针的另一个原因。如果some_functionsome_other_function都接受了它们的参数,std::unique_ptr<object>那么你会(假设你的函数表现良好)知道指向的对象被some_other_function. 同样,如果他们接受 astd::shared_ptr<object>作为参数,您就会知道在调用 后该对象仍然存在some_other_function。拥有清晰的所有权语义是编写安全代码的关键之一,而智能指针对定义这些所有权语义有很大帮助。


推荐阅读