如何检测存储在指针中的对象是否被删除?

时间:2015-06-16 08:46:28

标签: c++

我在一个模块(让我们的调用模块A)中有指针来存储我想要访问的所有对象(在模块B中)。它工作正常。

为这些对象添加动态创建/删除功能时(在模块B中)。创建很好,而删除会产生我的指针无效的问题。

有没有简单的方法可以检查指针指向的对象是否仍然有效? (我可以想到在模块B中的对象的析构函数中添加函数以通知模块A进行更新,但这并不容易)

2 个答案:

答案 0 :(得分:3)

没有。你必须以某种方式管理对象的生命周期。

幸运的是,C ++标准库为我们提供了执行此操作的工具:使用std::shared_ptr指针可以共享对象的所有权,使用std::weak_ptr指针指向由共享指针管理的指针,但不指向自己参与所有权分享计划。

(同样,在适当时使用std::unique_ptr

答案 1 :(得分:1)

不,通常无法测试(原始)指针是否指向有效对象。

只有在知道指针未指向有效对象的情况下才会确定它是否为null。因此,如果在删除指向对象后始终将指针设置为null,则可以通过测试nullness来检查有效性。当然,如果您复制指针,这很快就会变得无法忍受。

通过使用智能指针来保证有效性要容易得多。只有当您指向它时,才会删除仅由shared_ptr或仅unique_ptr指向的对象。除非对象愚蠢并且调用delete this