码迷,mamicode.com
首页 > 编程语言 > 详细

C++11:21通过智能指针管理第三方库分配的内存

时间:2020-05-25 19:51:58      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:整理   ++   需要   三方   调用   void   eth   抽象   本质   

21、通过智能指针管理第三方库分配的内存

0、课前秀

  • 第三方库分配的内存一般需要通过第三方库提供的释放接口才能释放,由于第三方库返回的指针一般都是原始指针,在用完之后没有调用第三方库的释放接口,就很容易造成内存泄露。

1、示例

  • 第三方库的释放(可能会存放跟new,delete一样,忘记释放或走不到分支)
void* p = GetHandle()->Create();
//do something...
GetHandle()->Release(p);
  • 用智能指针暂时解决
void* p = GetHandle()->Create();
std::shared_ptr<void> sp(p,[this](void*p){GetHandle()->Release(p);});
  • 抽象成公共函数
std::shared_ptr<void> Guard(void* p)
{
    return std::shared_ptr<void> sp(p,[this](void* p){GetHandle()->Release(p);});
}

void* p = GetHandle()->Create();
auto sp = Guard(p);
//do something...
  • 用宏解决
#define GUARD(P) std::shared_ptr<void> p##p(p,[](void* p){GetHandle()->Release(p);});

void *p = GetHandle()->Create();
GUARD(p);//安全
  • 用unique_ptr来管理第三方内存
#define GUARD(P) std::unique_ptr<void,void(*)(int *) > p##p(p,[](void* p){GetHandle()->Release(p);});

ReadMe

  • 20200525下班后整理,管理第三方本质上的思路还是管理库原生的呗。

C++11:21通过智能指针管理第三方库分配的内存

标签:整理   ++   需要   三方   调用   void   eth   抽象   本质   

原文地址:https://www.cnblogs.com/fewolflion/p/12960316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!