我遇到了一种情况,构造函数分配了动态内存,如果构造函数中发生任何异常,它就不会释放动态分配的内存。为了避免这种情况,我使用了unique_ptr,它能够正确释放内存。
在这里展示情况是一个伪代码。
NULL
对于这种情况,这是正确有效的方法吗?对于这种情况,是否还有更好的选择?
编辑1:删除了错误遗留的析构函数中的注释代码
答案 0 :(得分:1)
不,这恰恰是智能指针和一般RAII的重点和预期用例。
还要注意,在任何情况下,析构函数中的delete a
都是错误的,因为unique_ptr
本身并不是指针。相关地,如果构造函数中有异常,则也不会调用析构函数。