假如一个函数在申请了堆内存,并且这个函数可能在多处返回,怎么样处理堆内存的释放

C++语言 码拜 8年前 (2016-04-12) 1090次浏览
假如一个函数在申请了堆内存,并且这个函数可能在多处返回,怎么样处理堆内存的释放?
本人遇到的问题如下(伪代码):
int funA()
{
unsigned char *pHeap = funB();//funB函数内部申请的堆内存,返回给pHeap,并且申请的内存是一个unsinged char的数组
if(….)   return x;
if(….)   return y;
//……..多种情况都导致funA()返回
}
假如在每次返回的代码前加释放的语句,感觉有些难看。
假如用智能指针 感觉好像有问题,而且这个智能不是维护的一个类对象,本人用代码测试了shared_ptr<unsigned char> pSharedHeap,跟踪一下智能指针 的释放,它最后只是用delete 来释放内存,而不是delete[]。这样的话,也是会内存泄漏吧。
本人该怎么处理这个问题?
希望论坛的朋友帮帮忙,给些建议。谢谢。
解决方案

40

auto uchar_arr_deleter = [](unsigned char *p){delete [] p;};
std::shared_ptr<unsigned char, decltype(uchar_arr_deleter)> pShareHeap(new unsinged char[100], uchar_arr_deleter);
///////  随便写的,具体去查 std::shared_ptr 的文档。

你这个需求不需要 shared_ptr, std::unique_ptr<unsigned char[]> pUniqueHeap; 就可以了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明假如一个函数在申请了堆内存,并且这个函数可能在多处返回,怎么样处理堆内存的释放
喜欢 (0)
[1034331897@qq.com]
分享 (0)