我正在考虑实现以下策略:
在类方法中处理 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
}
问题:上述“肮脏的黑客”是否是一种在展开异常时在途中释放内存的安全策略?有什么优点和缺点?
最佳答案
您无需执行任何此类操作 - vector 将自动销毁。这就是 RAII 的工作原理。即使您希望在其他情况下清除 vector ,它也会附带一个 clear()
。方法。或者你可以做 vec = std::vector<T>();
.
关于c++ - 在发生 bad_alloc 异常时从 std 容器中释放内存的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10261087/