C++中动态申请的数组内存异常时内存释放问题

在C++的一个方法中动态申请了一段数组的内存,还未通过delete[] 语句释放这段内存,方法异常,此时代码不会执行后面的delete[] 语句了,那么前面申请的这段数组内存怎么释放?

C++中的auto_prt只支持单个对象动态内存的管理,对于数组动态申请的内存怎么管理?

应该在运行期系统自动帮你归还,前提是你的数组是由class构成,但不是内置类型。详见EFFECTIVE C++第三版条款52(写了placement new也要写placement delete)的开头部分

1.使用shared_array. 在boost库中

shared_array<int> array(new int[100]);
throw exception;

2.使用shared_ptr 在c++11中

shared_ptr<array<int, 10> > sp;
throw exception;

如果你能预计到可能有异常,那你需要先catch住,之后再做后续的处理

如果lz一定需要用异常,可以把动态申请的内存,用一个你的catch的地方可以访问的容器保存。

个人不建议依靠异常机制来让程序正确运行,出异常的时候通常应该是不知道该怎么的时候,这种时候就让程序挂掉反而更好一点。

参考《代码大全》:仅在其他编码实践方法无法解决的情况下,才使用异常