c++ - 如何理解对象已被破坏?
问题描述
我有一些代码:
void some_function(object *o)
{
some_other_function(o);
/* some actions with o */
}
一切都很好,但在某些情况下some_other_function
可能会破坏o
. 我怎样才能检查它some_function
以避免分段错误?
我认为该对象已设置为NULL
但从调试器中检查它,我意识到它不是。
解决方案
唯一的方法是阅读some_other_function
. 在某些情况下,即使这样可能还不够。仅通过查看指针无法知道该指针是否指向有效的东西。
这是您应该对所有拥有的指针使用智能指针的另一个原因。如果some_function
和some_other_function
都接受了它们的参数,std::unique_ptr<object>
那么你会(假设你的函数表现良好)知道指向的对象被some_other_function
. 同样,如果他们接受 astd::shared_ptr<object>
作为参数,您就会知道在调用 后该对象仍然存在some_other_function
。拥有清晰的所有权语义是编写安全代码的关键之一,而智能指针对定义这些所有权语义有很大帮助。
推荐阅读
- go - 在 Golang 中作为参数传递的“抽象”构造函数方法
- ios - 如何使用自定义动画选择性地为 CALayer 的属性设置动画
- javascript - 在 WooCommerce 中显示选定的变体
- php - PHP 为数组元素分配新值
- python - 如何在女服务员中使用下划线标题?
- javascript - 无法通过函数调用使用 useState 挂钩设置状态
- typescript - 使用泛型作为没有其类型的类型但打字稿
- android - Flutter:如何在没有“clientViaUserConsent”的情况下使用 Calendar Api 创建事件?
- swiftui - 将变量的值从一个视图发送到另一个视图 - SwiftUI
- java - 如何从 Spring Boot JPA 中的列实体进行分页存储库调用