大多数人说从不从析构函数中抛出异常——这样做会导致未定义的行为。Stroustrup指出"vector析构函数显式调用每个元素的析构函数。这意味着如果元素析构函数抛出,vector销毁失败......确实没有很好的方法来防止析构函数抛出异常,所以库不保证元素析构函数是否抛出”(来自附录E3.2)。Thisarticle似乎另有说法-抛出析构函数或多或少是可以的。所以我的问题是——如果从析构函数中抛出导致未定义的行为,你如何处理析构函数期间发生的错误?如果在清理操作过程中出现错误,你会忽略它吗?如果它是一个可以在堆栈中处理但在析构函数中不正确的错误,那么从析构函数中抛出异常是否有意义?显
C++是否支持'finally'block?什么是RAIIidiom?C++的RAII习语和C#'s'using'statement有什么区别?? 最佳答案 不,C++不支持“finally”block。原因是C++支持RAII:“ResourceAcquisitionIsInitialization”——一个真正有用的概念糟糕的名字†。这个想法是对象的析构函数负责释放资源。当对象具有自动存储持续时间时,对象的析构函数将在创建它的block退出时被调用——即使该block在存在异常的情况下退出。这里是BjarneStroustrup
C++是否支持'finally'block?什么是RAIIidiom?C++的RAII习语和C#'s'using'statement有什么区别?? 最佳答案 不,C++不支持“finally”block。原因是C++支持RAII:“ResourceAcquisitionIsInitialization”——一个真正有用的概念糟糕的名字†。这个想法是对象的析构函数负责释放资源。当对象具有自动存储持续时间时,对象的析构函数将在创建它的block退出时被调用——即使该block在存在异常的情况下退出。这里是BjarneStroustrup