在bad_alloc异常的情况下从std容器释放内存的策略

时间:2012-04-21 16:55:03

标签: c++ memory-management exception-handling

我正在考虑实施以下策略:

在类方法中处理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
} 

问题:上面的“脏黑客”是一个安全的策略,在正在展开异常时解除内存的内存?有什么优点和缺点?

1 个答案:

答案 0 :(得分:3)

您无需执行任何此类操作 - 矢量将自动销毁。这就是RAII的工作方式。即使您希望在某些其他情况下清除向量,它也会附带clear()方法。或者你可以vec = std::vector<T>();