前言
我在上一篇文章中介绍了几种误用智能指针的例子。还有一种比较典型,就是混用两种类型的智能指针。直接看代码吧!
示例代码
1 |
|
pWall
在析构的时候会调用 Release()
递减引用计数到 0
,从而调用 delete
。pSharedWall
拿着同样的指针,在析构的时候也会调用 delete
删除同一块地址。于是暴雷了!
那么有办法把 RefCountPtr
类型的智能指针交给 shared_ptr
管理吗?答案是肯定的,只需要把 Test()
改成看下面这样即可:
1 | void Test() |
在构造 shared_ptr
类型的智能指针的时候,可以传递一个自定义的 Deleter
,这个 Deleter
不需要做任何事情。
基于引用计数的智能指针的一个实现
基于引用计数的智能指针常用于 COM
编程中,下面的代码是一份简要的实现,感兴趣的小伙伴儿可以看一看。毕竟,手机不太适合看代码,也可以下载后在电脑上查看。
1 |
|
附件
文中的 RefCounterPtr
实现可以参考附件,下载地址如下:
百度云盘链接: https://pan.baidu.com/s/1HpFELQf97pkximT5oGm2pg 提取码: h7w8
CSDN:https://download.csdn.net/download/xiaoyanilw/13679955
总结
shared_ptr
的 Deleter
妙用无穷,本文只是其中的一个用处。