在析构函数中执行任务

时间:2014-05-23 08:07:17

标签: c++ destructor

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

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

2 个答案:

答案 0 :(得分:4)

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

优良作法是为关键的清理/资源管理提供公共接口,以便客户端代码可以调用它并在出现任何异常时进行处理。您可以检查清理过程是否在析构函数中完成,如果不执行,但吞下任何抛出的异常

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

答案 1 :(得分:0)

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