C/C++基础进阶篇:C++11 中引入的 delete 描述符使用场景
C++11 中引入的 delete 描述符主要有如下两个使用场景:
禁止编译器自动生成拷贝
Effective C++中提到
通过“私有化 + 只声明、不定义” 的方法禁止编译器生成某些拷贝构造函数、拷贝操作符等。
在C++11及以后,可以通过delete描述符来实现。
classno_copies
{
public:
no_copies(){}
no_copies(no_copiesconst&) =delete;
no_copies&operator=(no_copiesconst&) =delete;
};
可以为任意函数使用 delete 描述,表明其不可用
较“私有化+只声明不定义”的方式相比,将连接错误转移到编译错误
拷贝构造和拷贝赋值操作删除后,需要显式写一个移动构造函数和移动赋值操作符,
如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)
只移动的类,移动构造:
classmove_only{std::unique_ptrdata;public:move_only(constmove_only&) =delete;move_only(move_only&& other):data(std::move(other.data)){}move_only&operator=(constmove_only&) =delete;move_only&operator=(move_only&& other){data=std::move(other.data);return*this;}};move_only m1;move_onlym2(m1);// 错误,拷贝构造声明为“已删除”move_onlym3(std::move(m1));// OK,找到移动构造函数
删除特定的重载
如:函数需要 short 作为参数,禁止扩展为 int 类型
voidfoo(short);
voidfoo(int)=delete;
结果会这样:
foo(42);// 错误,int重载声明已经删除
foo((short)42);// OK
C/C++基础进阶篇:C++11 中引入的 delete 描述符使用场景相关推荐
- OpenCV3学习(11.3)关键点的描述符KeyPoint对象与匹配类DMatch
corners:包含大量本地信息的像素块,并能够在另一张图中被快速识别 keypoints:作为 corners 的扩展,它将像素块的信息进行编码从而使得更易辨识,至少在原则上唯一 descripto ...
- 〖Python零基础入门篇⑩〗 - Python中的数字类型及应用
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- 〖Python零基础入门篇㉚〗- Python中的循环
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- 〖Python零基础入门篇㉗〗- Python中集合的常用方法
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- 〖Python零基础入门篇㊾〗- Python中的 os 包
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- 〖Python零基础入门篇㊽〗- Python中的时间包
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- Linux中通过Socket文件描述符寻找连接状态介绍
针对下文的总结:socket是一种文件描述符 进程的打开文件描述符表 Linux的三个系统调用:open,socket,pipe 返回的都是一个描述符.不同的进程中,他们返回的描述符可以相同.那么,在 ...
- USB开发基础:USB命令(请求)和USB描述符
一.USB命令 在USB规范里,对命令一词提供的单词为"Request",但这里为了更好的理解主机与设备之间的主从关系,将它定义成"命令". 所有的USB设备都 ...
- Java 基础进阶篇(四):抽象类与模板方法设计模式
文章目录 一.抽象类.抽象方法概述 二.抽象类的特征 三.模板方法设计模式 3.1使用场景 3.2 实现步骤 3.3 写作文案例 补充:final 和 abstract 是什么关系? 一.抽象类.抽象 ...
最新文章
- 如何在Ubuntu上使用ssh-add永久添加私钥? [关闭]
- 【前端统计图】echarts实现属性修改
- 结对-英文词频分析-开发环境搭建过程
- Ribbon-3使用配置文件自定义Ribbon Client
- 关于PHP使用GD库生成的验证码无法在别处显示
- nowcoder OI 周赛 最后的晚餐(dinner) 解题报告
- typescript 接口 interface 的理解
- androidpn的学习研究(一)androidpn-server服务端相关配置的常识
- Linux 命令(119)—— diff 命令
- Citrix XenApp6.5 另类发布文档
- 使用wireshark抓取qq好友ip地址
- 汽车电子ISO7637-2 5A/5B抛负载测试详解
- 详细介绍ADMM交替方向乘子法
- mysql 80070057_0x80070057错误原因
- 树莓派学习笔记——串口与摄像头
- 为什么计算机无法读取u盘,U盘无法被电脑识别怎么办?
- 除了高额房贷,美国购房者仍面临其他“财政危机”
- DIY树莓派小车(一)树莓派4B+TB6612FNG驱动直流电机
- 解决Mscomctl.ocx丢失的问题
- win10+python3.66+vs2017+cuda9.2下运行tensorflow版的faster-Rcnn编译训练