c++ - 在发生 bad_alloc 异常时从 std 容器中释放内存的策略

标签 c++ memory-management exception

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

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

相关文章:

c++ - 具有递归函数的二进制转换给出奇数

C++-为类的成员变量释放动态分配的内存会出现错误

来自信号处理程序的 sys.exit() 上的 Python 核心转储

java - Class.forName() 和 ClassNotFoundException

c++ - 使用作为类成员的流写入文件

c++ - 找到链接到调试 CRT 的库

c++ - 声明指向基类和派生类的指针

delphi - 基于TInterfacedClass的Delphi插件框架的内存管理

c# - 以编程方式清除 Windows 7 待机内存

python-3.x - 无法捕获的空字节 csv.Error 异常