C++ 在C+中调用析构函数内部的函数是一种好的做法吗+;

C++ 在C+中调用析构函数内部的函数是一种好的做法吗+;,c++,C++,在析构函数中调用函数是一种很好的做法,析构函数在内部执行一些内存分配。因为这给了我访问冲突和其他问题,比如 ~Example(){ Stop(); } 在这个函数中,Stop()执行各种操作,还调用各种其他函数?这是一个好的做法。有人能帮助这个吗?< /P> < P>在析构函数内部调用函数没有错误,唯一重要的一点是,析构函数不应该发出任何异常。 因此,只要捕获从destructor内部的析构函数中调用的函数引发的所有异常,就安全了 从析构函数调用方法是可以的,只要它是释放/释放过程的一

在析构函数中调用函数是一种很好的做法,析构函数在内部执行一些内存分配。因为这给了我访问冲突和其他问题,比如

~Example(){
    Stop();
}

在这个函数中,Stop()执行各种操作,还调用各种其他函数?这是一个好的做法。有人能帮助这个吗?< /P> < P>在析构函数内部调用函数没有错误,唯一重要的一点是,析构函数不应该发出任何异常。
因此,只要捕获从destructor内部的析构函数中调用的函数引发的所有异常,就安全了

从析构函数调用方法是可以的,只要它是释放/释放过程的一部分。不建议以相反方向执行操作(获取资源/内存)。

当抛出
std::bad_alloc
时,即当内存分配失败时,调用析构函数。在这种情况下,在析构函数(或由析构函数调用的函数)中分配内存也可能会失败,引发异常


从析构函数抛出异常是一个非常糟糕的主意。现在,析构函数可以捕获第二个
std::bad_alloc
,但我怀疑它是否有必要的方法来适当地处理它。

正如其他人所说,这是可以的,但可能是危险的。请记住,类的某些部分可能已经被破坏,因此您可能无法使用类中的所有内容。此外,尝试处理方法中的异常。

析构函数必须执行的操作直接遵循类状态和设计。因此,选择是渺茫的。您可以通过内联或调用函数来完成。我认为没有理由不调用函数,特别是如果其他成员函数也可能使用它。(即,请参见具有
reset()
功能的智能指针的实现…)

你有点暗示如果工作很复杂,我们最好不要做。嗯,或者这个想法只是不在dtor中实现,而是把这个义务留给程序员?就像回到C一样?注意到C++最吸引人的特性是使用Dror使RaIII?< /P>
在dtor中需要特别注意的一件事是吞下异常。如果运气好的话,它们自然不会发生。如果有机会的话,让一些公共职能部门来执行大部分任务确实是个好主意,因为投掷是公平的游戏。(即
CFile
类关闭dtor中的文件,如果它仍然打开。当用于输出文件时,您应该手动关闭它,并处理可能出现的错误,如无法刷新完整磁盘上的最后一个缓冲区。您完成了所有这些操作,dtor将从繁重的工作中解脱出来。

cons调用析构函数没有错思维跟随

a)除非功能是虚拟的

b)避免调用访问已销毁数据成员的成员函数

bob::~bob()
  {
   delete ptr;
   this->increment(p); // undefined behavior
  }
c)防止析构函数抛出执行选项。


如果由于异常而调用析构函数,应用程序将终止。

谢谢。实际上我还有一个问题。由于访问或试图清除堆中不可访问的内存位置,我的应用程序中经常遇到访问冲突。你能告诉我解决这个问题的基本方法吗?不要使用
new
关键字。不要使用数组。@user1767288:最好的建议是:#1。尽量少使用动态内存,最好的C++程序是尽可能少使用<代码>新< /代码>。因为#1实际上是不可能的,所以#2使用智能指针而不是原始指针。在任何一种情况下,如果仍然存在内存访问冲突#3,请使用诸如valgrind之类的内存分析器工具来检查程序中与内存相关的错误导致的问题。顺便说一句,如果你正确地遵循#1和#2,那么你不太可能需要#3Oswald@user1767288当前位置你应该把问题作为单独的问题提出来,而不是煽动讨论