0

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

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

问题:上述“肮脏的黑客”是在展开异常时释放内存的安全策略吗?优缺点都有什么?

4

1 回答 1

3

您无需这样做 - 向量将自动销毁。这就是 RAII 的工作原理。即使您希望在其他情况下清除矢量,它也有一个clear()方法。或者你可以这样做vec = std::vector<T>();

于 2012-04-21T16:59:08.193 回答