c++ - 简单、高效的弱指针,在释放目标内存时设置为 NULL

标签 c++ pointers dangling-pointer

是否有简单、高效的弱/ protected 指针?我需要指向同一个对象的多个指针,当对象被删除时,这些指针都自动设置为 NULL。有一个始终用于删除对象的“主”指针,但可以有多个引用同一对象的其他指针。

以下是一些不太符合我需求的解决方案:

  • QPointer :我不是在开发 QT 应用程序;我不想包含这个库/从 QObject 派生。
  • boost::weak_ptr : 访问已释放的对象时抛出异常。对我的情况来说太贵了:测试弱指针应该是正常的;我计划在弱指针不再有效时进行一些手动清理。 更新:weak_ptr 可以在不抛出异常的情况下进行测试
  • Low-Overhead Weak Pointers :这与我正在寻找的非常接近,除了我不喜欢这样的事实“只要你不在同一位置分配 2**sizeof(int) 次,这个方案就可以保证工作。”

为什么我需要这些弱/ protected 指针: 我有一个包含游戏对象列表的游戏。一些对象依赖于其他对象,例如与游戏实体关联的调试/统计对象。调试/状态对象显示有关游戏实体的有用信息,但只有在游戏实体存在时才有意义。所以如果游戏实体被删除,调试/统计对象应该意识到这一点并删除自己。 (另一种想法是跟踪导弹:它可能会搜索新目标,而不是自行删除。)

我希望将调试/统计逻辑与游戏实体分开。游戏实体不必知道附加到它的调试/统计对象。虽然我更喜欢弱/ protected 指针的答案,但我也欢迎不同的方法来处理我的特定任务。我在想我可能必须实现 game object manager跟踪对象生命周期并使用句柄而不是指向内存地址的原始指针。

我正在使用 C++ 进行开发。

最佳答案

您可以使用 boost::weak_ptrlock() 成员来测试(然后使用)weak_ptr 的值> 不处理异常。

关于c++ - 简单、高效的弱指针,在释放目标内存时设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876150/

相关文章:

c++ - 使用boost::sregex_token_iterator时出错

c++ - 使用数组指针索引数组

swift - 如何在 Swift 中演示僵尸对象?

c++ - 比较悬空指针是否合法?

c++ - 是否可以从字符串访问变量?

c++ - 使用未定义的比较函数定义 std::map 编译和链接,这让我感到惊讶

c++ - libreoffice找不到-lstdc++

c++ - 从 const double 的指针返回指向 double 的指针

c++ - 使用指向结构 C++ 的指针创建动态分配的数组

c++ - clang++ 9.0 如何神奇地治愈 lambda 中的悬挂引用使用?