2 xuesonghnu xuesonghnu 于 2014.08.17 17:52 提问

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

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

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

4个回答

zuoyigexingfude
zuoyigexingfude   2014.08.17 21:02

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

diqiu50
diqiu50   2014.08.20 23:32

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;
finallygo
finallygo   2014.08.28 13:08

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

zilaishuichina
zilaishuichina   Rxr 2014.11.19 14:37

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!