在析构函数中执行对象的重要/关键任务是一种好方法吗? 如:
class MyObject{
~MyObject() {
Execute();
}
void Execute() {...}
};
答案 0 :(得分:4)
析构函数是一种在超出范围时自动清理对象持有的资源的方法。在析构函数中不应该做任何其他事情。但清理可能涉及关键或复杂的处理。还要确保异常不会留下析构函数。如果由于另一个异常而导致堆栈展开而最初调用了描述符,这将导致意外终止您的程序。
优良作法是为关键的清理/资源管理提供公共接口,以便客户端代码可以调用它并在出现任何异常时进行处理。您可以检查清理过程是否在析构函数中完成,如果不执行,但吞下任何抛出的异常。
总而言之,除了析构函数中的资源清理之外,执行任何操作(无论是否关键)都是 NOT 的良好做法。
答案 1 :(得分:0)
一般来说答案是否定的。例如。如果程序崩溃,析构函数就不会被调用。在没有调用dtor的情况下还有其他情况。析构函数是专用的清理方法。类用户期望这样的行为。