【发布时间】:2010-12-24 23:19:33
【问题描述】:
是否有一个简单、高效的弱/保护指针?我需要多个指向同一个对象的指针,这些指针在对象被删除时都自动设置为 NULL。有一个“主”指针始终用于删除对象,但可以有多个其他指针引用同一对象。
以下是一些不太符合我需求的解决方案:
- QPointer:我不是在开发QT应用;我不希望包含来自 QObject 的这个库/派生。
-
boost::weak_ptr:
访问已释放对象时抛出异常。对我的情况来说太贵了:测试弱指针应该是正常的;当弱指针不再有效时,我计划进行一些手动清理。更新:weak_ptr 可以在不抛出异常的情况下进行测试 - Low-Overhead Weak Pointers:这与我正在寻找的非常接近,除了我不喜欢这样一个事实“这个方案只有在你不分配 2**sizeof(int) 时间的情况下才能保证工作在同一个位置。”
为什么我需要这些弱/受保护的指针: 我有一个带有游戏对象列表的游戏。一些对象依赖于其他对象,例如与游戏实体关联的调试/统计对象。调试/状态对象显示有关游戏实体的有用信息,但它仅在游戏实体存在时才有意义。所以如果游戏实体被删除,调试/统计对象应该意识到这一点并删除自己。 (另一个想法是跟踪导弹:它可能会搜索新目标,而不是自我删除。)
我希望将调试/统计逻辑与游戏实体分开。游戏实体不必知道附加了调试/统计对象。虽然我更喜欢弱/受保护的指针的答案,但我也欢迎以不同的方式来处理我的特定任务。我在想我可能必须实现一个 game object manager 来跟踪对象的生命周期并使用句柄而不是指向内存地址的原始指针。
我正在使用 C++ 进行开发。
【问题讨论】:
-
一个普遍的问题是,“Qt 是开发游戏的正确选择吗?”
-
Boost 的弱指针允许你测试它是否有效。如果您直接尝试取消引用它,它只会引发异常 - 类似于尝试取消引用空指针时发生的情况。
-
C++11 有
std::weak_ptr。看起来与 Boost 中的相似。
标签: c++ pointers dangling-pointer