Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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++,我的公司使用这段代码从内存中删除所有对象。 但是由于捕获(…)的原因,我想知道如果该对象的析构函数失败(AV)会发生什么?安静地捕捉一切可以吗?如果析构函数失败了,我们不想知道这件事吗 #define DELNULL(p) \ { \ if (p) \ { \ try \ {delete p;} \ catch (...) \ {}

我的公司使用这段代码从内存中删除所有对象。
但是由于捕获(…)的原因,我想知道如果该对象的析构函数失败(AV)会发生什么?安静地捕捉一切可以吗?如果析构函数失败了,我们不想知道这件事吗

#define DELNULL(p) \
{                  \
if (p)             \
   {               \
   try             \
      {delete p;}  \
   catch (...)     \
      {}           \
   p = NULL;       \
   }               \
}                  \
安静地捕捉一切可以吗

通常情况下,无声地捕捉所有内容并不合适(无声地捕捉任何内容很少合适)。了解错误通常是有用的

在某些情况下,最好不要让异常传播。例如,如果我们在一个从C调用的函数中,或者如果我们不想终止,并且在析构函数中或者在一个
noexcept
函数中。但是,最好还是采用其他形式的错误报告,而不是默默地接受它们


注意:如果(p)检查是多余的,可以安全地删除。

AFAIK,。允许删除空指针,不需要测试它。你公司使用C++的什么版本?现在我们有了智能指针,甚至不需要再使用这些代码了<代码>新<代码> >代码>删除>代码>在现代C++中没有位置(除了放置新的)。我会通过这样做来改进它:<代码>定义“DelNULL”(p)do{DELPPTR;P= nulLptR;}(false)也不安全:析构函数不应该首先从:@ WeGoToMar如我所说:您的代码不能使它安全。你的应用程序仍可能崩溃。请参阅链接的答案。