21、通过智能指针管理第三方库分配的内存0、课前秀第三方库分配的内存一般需要通过第三方库提供的释放接口才能释放,由于第三方库返回的指针一般都是原始指针,在用完之后没有调用第三方库的释放接口,就很容易造成...

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通过智能指针管理第三方库分配的内存


猜你喜欢
- C语言详解float类型在内存中的存储方式 2023-03-27
- ubuntu下C/C++获取剩余内存 2023-09-18
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Easyx实现扫雷游戏 2023-02-06
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- C语言qsort()函数的使用方法详解 2023-04-26
- C++ 数据结构超详细讲解顺序表 2023-03-25
- Qt计时器使用方法详解 2023-05-30