在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的地方可以访问的容器保存。
个人不建议依靠异常机制来让程序正确运行,出异常的时候通常应该是不知道该怎么的时候,这种时候就让程序挂掉反而更好一点。
参考《代码大全》:仅在其他编码实践方法无法解决的情况下,才使用异常