在析构函数中执行任务

Perform task in destructor

本文关键字:执行任务 析构函数      更新时间:2023-10-16

在析构函数中执行对象的重要/关键任务是一种好技术吗?如:

class MyObject{
  ~MyObject() {
    Execute();
  }
  void Execute() {...}
};

析构函数是在对象超出作用域时自动清除对象所持有的资源的一种方法。在析构函数中不应该做任何其他操作。但清理可能涉及关键或复杂的处理。还要确保exception不会离开析构函数。这将导致意外终止程序,如果析构函数最初是由于另一个异常导致堆栈展开而调用的。

为关键清理/资源管理提供公共接口是很好的实践,这样客户端代码就可以调用它并处理任何异常。您可以检查清除过程是否在析构函数中完成,如果没有执行,但是将吞下抛出的任何异常

总而言之,除了在析构函数中清理资源之外,NOT是执行任何操作(无论关键与否)的好做法。

一般来说答案是否定的。例如,如果程序崩溃,则不会调用析构函数。还有其他不叫医生的情况。析构函数是用于清理的专用方法。类用户期望这样的行为