一、普通函数

void Deleter(T *x)
{delete[] x;
}std::shared_ptr<T> p1(new T[5], Deleter);

二、仿函数

class Deleter
{
public:void operator() (T *x) {delete[] x;}
};std::shared_ptr<T> p2(new T[5], Deleter);

三、lamda 表达式

std::shared_ptr<T> p3(new T[5], [](T *x) {delete[] x;
});

四、源代码

 shared_ptr(_Yp* __p, _Deleter __d): __shared_ptr<_Tp>(__p, std::move(__d)) { }/***  @brief  Construct a %shared_ptr that owns a null pointer*          and the deleter @a __d.*  @param  __p  A null pointer constant.*  @param  __d  A deleter.*  @post   use_count() == 1 && get() == __p*  @throw  std::bad_alloc, in which case @a __d(__p) is called.**  Requirements: _Deleter's copy constructor and destructor must*  not throw**  The last owner will call __d(__p)*/

从源代码注释中可以知道,当释放 __p 时,实际上就是调用 __d(__p),所以只要满足返回值为 void ,传入的删除器有单一形参并且形参为 T 的指针即可,

栗子:

 void Deleter(T *)void Deleter(T * const)void Deleter(T *&)

(SAW:Game Over!)

Cpp / shared_ptr 配置删除器的方法相关推荐

  1. [C++11]共享智能指针shared_ptr指定删除器

    当智能指针管理的内存对应的引用计数变为 0 的时候,这块内存就会被智能指针析构掉了.另外,我们在初始化智能指针的时候也可以自己指定删除动作,这个删除操作对应的函数被称之为删除器,这个删除器函数本质是一 ...

  2. [C++11]独占的智能指针unique_ptr的删除器

    unique_ptr 指定删除器和 shared_ptr 指定删除器是有区别的,unique_ptr 指定删除器的时候需要确定删除器的类型,所以不能像 shared_ptr 那样直接指定删除器,举例说 ...

  3. C++ 智能指针 :内存泄漏、 RAII、智能指针、auto_ptr、unique_ptr、shared_ptr、weak_ptr、定制删除器deleter

    文章目录 内存泄漏 什么是内存泄漏 内存泄漏的危害: 如何避免内存泄漏 RAII 智能指针 auto_ptr unique_ptr shared_ptr 循环引用问题 weak_ptr 定制删除器 内 ...

  4. 16.3 shared_ptr常用操作、计数与自定义删除器等

    一:shared_ptr引用计数的增加和减少 共享式引用计数,每一个shared_ptr的拷贝都指向相同的内容(对象),只有最后一个指向该对象的shared_ptr指针不需要. 在指向该对象的时候,这 ...

  5. shared_ptr循环引用定置删除器

    shared_ptr虽然方便,但是它有着一个致命的缺陷就是循环引用问题,因为shared_ptr本身并没有能力解决这个问题,所以我们又引入了弱指针weak_ptr来辅助shared_ptr解决这个问题 ...

  6. VS2015配置PCL详细教程,使用配置属性管理器的方法,一劳永逸

    此处并不讲PCL的安装,假设已经安装完成PCL,并已经配置好环境变量 工程配置方法: 0.先是建立一个工程,这里命名为pclTest 接下来开始配置PCL 注意: 配置属性管理器和资源管理器的区别:配 ...

  7. C++智能指针的多线程访问共享对象问题以及自定义删除器

    多线程访问共享对象问题 问题描述:线程A和线程B访问一个共享的对象,如果线程A正在析构这个对象的时候,线程B又要调用该共享对象的成员方法,此时可能线程A已经把对象析构完了,线程B再去访问该对象,就会发 ...

  8. 控制服务器信息不存在或已删除,错误1075:依存服务不存在, 或已标记为删除的解决方法...

    错误1075:依存服务不存在, 或已标记为删除的解决方法 2020年09月09日 | 萬仟网科技 | 我要评论 错误1075:依存服务不存在, 或已标记为删除的解决方法今天帮客户配置服务器的时候,启动 ...

  9. 在Windows 7下面IIS7的安装和 配置ASP的正确方法

    在Windows 7下如何安装IIS7,以及IIS7在安装过程中的一些需要注意的设置,以及在IIS7下配置ASP的正确方法. 一.进入Windows 7的 控制面板,选择左侧的打开或关闭Windows ...

最新文章

  1. transforms.compose()
  2. 安卓无需root权限小黄鸟抓包教程
  3. php7和python3性能对比-python2.7和3.7的区别
  4. 制作rhel的yum仓库
  5. 神奇的四次方数(洛谷P1679题题解,Java语言描述)
  6. Linux-Ubuntu安装JDK
  7. 17.Mongodb预分片(pre-split)/autosplit(chunk/jumbochunk相关)
  8. jquery视频教程(jquery视频教程全集)
  9. 《深入浅出数据分析》读后详解
  10. linux eclipse安装使用教程
  11. 海信电视root后误删软件无法进入主页键解决办法
  12. Heka的一些计算过程数据存放目录
  13. bt_迅雷_种子文件后缀名
  14. 用于实时大数据处理的Lambda架构
  15. Java核心知识:面向对象-多态
  16. java制作《石头迷阵》游戏。
  17. C++(面试题):给40亿个不重复的无符号整数,没排过序,如何快速判断一个数是否在这40亿个数中
  18. docker 镜像使用
  19. Android_常驻进程(杀不死的进程)
  20. 【原】WPF按钮或page获取焦点后,按backspace键,后退的解决方法

热门文章

  1. angular之表单
  2. node.js学习笔记(21) express日志
  3. [经典算法] 河内塔
  4. asp.net上传图片文件自动修改图片大小代码
  5. TIOBE 2011年7月编程语言排行榜:Objective-C成为年度语言
  6. WCF生成客户端对象方式解析
  7. [java]apache server与 tomcat 的区别以及整合
  8. Django 3.2.5博客开发教程:一些常用的模板使用方法
  9. Linux xsync分发脚本完整内容
  10. k8s设置标签禁止istio边车sidebar注入