我正在考虑实施以下策略:
在类方法中处理std::bad_alloc
异常时,将在重新抛出异常之前尽可能/有意义地尝试释放内存。所以如果一个对象有一些可以被释放的标准容器(std::vector<>),那么我们可能会这样做:
catch( std::bad_alloc& e ) {
//free any memory in my std::vector member, how? by doing this dirty hack
~myVec();
new ( &myVec) std::vector<myType>();
throw; //rethrow exception
}
问题:上述“肮脏的黑客”是在展开异常时释放内存的安全策略吗?优缺点都有什么?