我正在考虑实施以下策略:
在类方法中处理std::bad_alloc
异常时,在重新抛出异常之前,将尽可能/有意义地尝试释放内存。因此,如果一个对象有一些可以释放的std容器(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
}
问题:上面的“脏黑客”是一个安全的策略,在正在展开异常时解除内存的内存?有什么优点和缺点?
答案 0 :(得分:3)
您无需执行任何此类操作 - 矢量将自动销毁。这就是RAII的工作方式。即使您希望在某些其他情况下清除向量,它也会附带clear()
方法。或者你可以vec = std::vector<T>();
。