Cpp / shared_ptr 配置删除器的方法
一、普通函数
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 配置删除器的方法相关推荐
- [C++11]共享智能指针shared_ptr指定删除器
当智能指针管理的内存对应的引用计数变为 0 的时候,这块内存就会被智能指针析构掉了.另外,我们在初始化智能指针的时候也可以自己指定删除动作,这个删除操作对应的函数被称之为删除器,这个删除器函数本质是一 ...
- [C++11]独占的智能指针unique_ptr的删除器
unique_ptr 指定删除器和 shared_ptr 指定删除器是有区别的,unique_ptr 指定删除器的时候需要确定删除器的类型,所以不能像 shared_ptr 那样直接指定删除器,举例说 ...
- C++ 智能指针 :内存泄漏、 RAII、智能指针、auto_ptr、unique_ptr、shared_ptr、weak_ptr、定制删除器deleter
文章目录 内存泄漏 什么是内存泄漏 内存泄漏的危害: 如何避免内存泄漏 RAII 智能指针 auto_ptr unique_ptr shared_ptr 循环引用问题 weak_ptr 定制删除器 内 ...
- 16.3 shared_ptr常用操作、计数与自定义删除器等
一:shared_ptr引用计数的增加和减少 共享式引用计数,每一个shared_ptr的拷贝都指向相同的内容(对象),只有最后一个指向该对象的shared_ptr指针不需要. 在指向该对象的时候,这 ...
- shared_ptr循环引用定置删除器
shared_ptr虽然方便,但是它有着一个致命的缺陷就是循环引用问题,因为shared_ptr本身并没有能力解决这个问题,所以我们又引入了弱指针weak_ptr来辅助shared_ptr解决这个问题 ...
- VS2015配置PCL详细教程,使用配置属性管理器的方法,一劳永逸
此处并不讲PCL的安装,假设已经安装完成PCL,并已经配置好环境变量 工程配置方法: 0.先是建立一个工程,这里命名为pclTest 接下来开始配置PCL 注意: 配置属性管理器和资源管理器的区别:配 ...
- C++智能指针的多线程访问共享对象问题以及自定义删除器
多线程访问共享对象问题 问题描述:线程A和线程B访问一个共享的对象,如果线程A正在析构这个对象的时候,线程B又要调用该共享对象的成员方法,此时可能线程A已经把对象析构完了,线程B再去访问该对象,就会发 ...
- 控制服务器信息不存在或已删除,错误1075:依存服务不存在, 或已标记为删除的解决方法...
错误1075:依存服务不存在, 或已标记为删除的解决方法 2020年09月09日 | 萬仟网科技 | 我要评论 错误1075:依存服务不存在, 或已标记为删除的解决方法今天帮客户配置服务器的时候,启动 ...
- 在Windows 7下面IIS7的安装和 配置ASP的正确方法
在Windows 7下如何安装IIS7,以及IIS7在安装过程中的一些需要注意的设置,以及在IIS7下配置ASP的正确方法. 一.进入Windows 7的 控制面板,选择左侧的打开或关闭Windows ...
最新文章
- transforms.compose()
- 安卓无需root权限小黄鸟抓包教程
- php7和python3性能对比-python2.7和3.7的区别
- 制作rhel的yum仓库
- 神奇的四次方数(洛谷P1679题题解,Java语言描述)
- Linux-Ubuntu安装JDK
- 17.Mongodb预分片(pre-split)/autosplit(chunk/jumbochunk相关)
- jquery视频教程(jquery视频教程全集)
- 《深入浅出数据分析》读后详解
- linux eclipse安装使用教程
- 海信电视root后误删软件无法进入主页键解决办法
- Heka的一些计算过程数据存放目录
- bt_迅雷_种子文件后缀名
- 用于实时大数据处理的Lambda架构
- Java核心知识:面向对象-多态
- java制作《石头迷阵》游戏。
- C++(面试题):给40亿个不重复的无符号整数,没排过序,如何快速判断一个数是否在这40亿个数中
- docker 镜像使用
- Android_常驻进程(杀不死的进程)
- 【原】WPF按钮或page获取焦点后,按backspace键,后退的解决方法