Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检测指针中存储的对象是否被删除?_C++ - Fatal编程技术网

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

C++ 如何检测指针中存储的对象是否被删除?,c++,C++,我在一个模块(我们称之为模块a)中有指针来存储我想要访问的所有对象(在模块B中)。它很好用 为这些对象添加动态创建/删除功能时(在模块B中)。创建是好的,而删除则会导致我的指针不再有效的问题 有没有简单的方法来检查指针指向的对象是否仍然有效?(我可以考虑在模块B中的对象析构函数中添加函数来通知模块A进行更新,但这并不容易)不。您必须以某种方式管理对象的生存期 幸运的是,C++标准库提供了这样做的工具:使用指针>可以共享对象的指针和“代码> STD::SytDypPTR < /Cord>::弱指针

我在一个模块(我们称之为模块a)中有指针来存储我想要访问的所有对象(在模块B中)。它很好用

为这些对象添加动态创建/删除功能时(在模块B中)。创建是好的,而删除则会导致我的指针不再有效的问题

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

不。您必须以某种方式管理对象的生存期

幸运的是,C++标准库提供了这样做的工具:使用指针>可以共享对象的指针和“代码> STD::SytDypPTR < /Cord>::弱指针PTR 指针指向指向共享指针管理但不参与共享方案的指针。” (另外,在适当的时候使用
std::unique\u ptr

否。您必须以某种方式管理对象的生存期

幸运的是,C++标准库提供了这样做的工具:使用指针>可以共享对象的指针和“代码> STD::SytDypPTR < /Cord>::弱指针PTR 指针指向指向共享指针管理但不参与共享方案的指针。”
(也可以在适当的时候使用
std::unique_ptr

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

只有当指针的值为null时,才能确定指针没有指向有效对象。因此,如果删除指向的对象后始终将指针设置为null,则可以通过测试null来检查有效性。当然,如果复制指针,这很快就会变得难以忍受


使用智能指针更容易保证有效性。仅由
shared_ptr
或仅由
unique_ptr
指向的对象将永远不会被删除,只要您指向它。除非对象很傻并调用
删除此
否,否则通常无法测试(原始)指针是否指向有效对象

只有当指针的值为null时,才能确定指针没有指向有效对象。因此,如果删除指向的对象后始终将指针设置为null,则可以通过测试null来检查有效性。当然,如果复制指针,这很快就会变得难以忍受

使用智能指针更容易保证有效性。仅由
shared_ptr
或仅由
unique_ptr
指向的对象将永远不会被删除,只要您指向它。除非该对象很傻,并调用
删除此