shared_ptr 自定义 deleter 删除器
一些结论
- 如果 shared_ptr 管理的资源不是 new 分配的内存,才考虑自定义删除器,这也是为什么 make_shared 不支持自定义删除器的原因,因为 make_shared 就是通过 new 分配内存资源
make_shared
不支持自定义删除器shared_ptr<Bar> sp2(sp1, deleter1);
无法指定自定义删除器- 《C++ Primer 5th》P413 错误?
- sp1 不能是
shared_ptr
,可以是内置指针
reset()
参数为空或为内置指针,可以重新指定删除器- 顺便说一下,C++11 只有 make_shared,C++14 加入了 make_unique
测试代码
class Bar {
public:
Bar(int ii) : i(ii) { cout << "Bar(" << i << ")" << endl; }
~Bar() { cout << "~Bar(" << i << ")" << endl; }
int i;
};
void deleter1(Bar* b) { cout << "deleter1 (" << b->i << ")" << endl; }
int main() {
shared_ptr<Bar> sp1(new Bar(1), deleter1);
auto sp2 = sp1; // OK
// shared_ptr<Bar> sp2(sp1, deleter1); // 编译错误!
cout << endl;
sp1.reset(new Bar(2)); // 可以重新指定其他 deleter
// 先析构 sp2--> Bar1 ,再析构 sp1 --> Bar2
}
运行结果
Bar(1)
Bar(2)
deleter1 (1)
~Bar(2)
本文作者:Zijian/TENG(微信公众号:好记性如烂笔头),转载请注明原文链接:https://www.cnblogs.com/tengzijian/p/17289473.html
分类:
C/C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具