在c++的析构函数中调用函数是一种好做法吗?
Is it a good practice to call a function inside a destructor in C++
在内部分配内存的析构函数中调用函数是一个好做法吗?因为这会给我访问冲突和其他问题,假设
~Example(){
Stop();
}
在这个函数Stop()做各种事情,也调用各种其他函数?这是一个很好的练习吗?有人能帮忙吗?
在析构函数内部调用函数没有什么错,唯一需要考虑的重点是析构函数不应该发出未捕获的异常。
因此,只要在析构函数内部捕获析构函数中调用的函数抛出的所有异常,就安全了。
从析构函数调用方法是可以的,只要它是释放/释放过程的一部分。不建议反向操作(获取资源/内存)
正如其他人所说,这是可以的,但可能是危险的。请记住,类的某些部分可能已经被销毁,因此您可能无法使用类中的所有内容。此外,尝试在方法内部处理异常。
析构函数在抛出std::bad_alloc
时(即当内存分配失败时)被调用。在这种情况下,在析构函数(或由析构函数调用的函数)中分配内存也可能失败,引发异常。
从析构函数抛出异常是一个非常糟糕的主意。现在,析构函数可以捕获第二个std::bad_alloc
,但我怀疑它是否有必要的手段来适当地处理它。
析构函数必须做的事情直接取决于类的状态和设计。所以选择余地很小。你可以内联或者调用一个函数。我看不出为什么不调用一个函数,特别是如果其他成员函数也可能使用它。(即参见具有reset()
函数的智能指针的实现…)
你有点暗示如果工作很复杂,我们最好不要做。嗯。或者这个想法只是不直接做,而是把这个义务留给程序员?回到C?忽略了c++最吸引人的特性是拥有启用RAII的函数吗?
看医生要特别注意的一件事是吞下异常。运气好的话,这种事自然不会发生。如果有机会,让一些公共功能来执行大多数任务确实是一个好主意,从那里投掷是公平的游戏。(即CFile
类关闭文件在博士,如果它仍然打开。当用于输出文件时,您应该手动关闭它并处理可能的错误,例如无法刷新整个磁盘上的最后一个缓冲区。你把这些都做完,医生就可以从繁重的工作中解脱出来了。
在析构函数中调用函数没有错,只要考虑以下情况
a)除非函数是虚函数
http://www.artima.com/cppsource/nevercall.htmlb)避免调用访问已经销毁的数据成员的成员函数
bob::~bob()
{
delete ptr;
this->increment(p); // undefined behavior
}
c)防止析构抛出异常。
如果由于异常已经存在而调用析构函数,应用程序将终止。
- 什么时候调用组成单元对象的析构函数
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 什么时候调用析构函数
- 优先顺序:智能指针和类析构函数
- C++-明确何时以及如何调用析构函数
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- 哪种方法更适合处理虚拟析构函数?
- 在共享指针的值中调用 std::swap 调用一堆构造函数和析构函数
- 在析构函数中调用函数是一种很好的做法
- 为什么析构函数被调用两次,而构造函数只被调用一次
- 虚拟析构函数会是一件坏事吗?
- 应该删除必须是析构函数中的最后一条语句
- 我的基类中有一个虚拟析构函数和一个数组.我怎样才能让它发挥作用
- 在c++的析构函数中调用函数是一种好做法吗?
- delete[]在调用析构函数后一次释放内存
- 是否有一种方法可以使c++析构函数被急切地调用
- 为什么析构函数只被调用过一次
- 只能在析构函数中释放一次的资源的惯用移动构造器
- 我的析构函数每隔一秒调用一次