[C++] delete关键字的妙用

news/2025/1/20 9:55:03/

文章目录

  • delete 的使用
  • 对比private 成员函数的作用,delete有更多优势
  • Reference

优先使用delete函数,而不是private未定义函数
任何函数都可以删除,包括非成员函数和模板具现

delete 的使用

  • 一般使用type Function(args) = delete表示函数为删除函数,不可调用。用于显示告诉用户这个函数不能使用或者这类函数不可使用;

对比private 成员函数的作用,delete有更多优势

  • private一个成员函数的本意就是不让人用或者是显性表示删除给函数;所以直接用delete即可。
  • 在类中使用delete函数时,要注意放到public session中;
  • delete的函数能提早爆出错误;而private的函数只有在链接阶段才暴露出来。
  • 以下代码中说明了delete的一些好处
//1) delete 可以标志类外部的函数
bool isLucky(int);
bool isLucky(char) = delete; // 表示当输入char时,非法;
bool isLucky(double) = delete; // 表示当输入double/float时,非法; 因为当float类别面临转型为int或double时,会优先于转double。
template <typename T>
void processPointer(T* ptr);
// 2) 对于模板中 显性消除对一些类别的支持。而类中模板成员函数,则无法使用private的方式进行消除,因为不能特例化public权限函数时将其权限改为private。
template <typename T>
void processPointer(T* ptr);
template <>
void processPointer(void* ptr) = delete; // 显性消除对void的支持。【可以考虑加入自己工程中】
template <>
void processPointer(char* ptr) = delete;// char*指针一般是指C风格的字符串,而不是涉及到单个字符指针;
// 3) 对于类中模板函数,delete可以在外部声明
class Widget {
public:template <typename T>void processPointer(T* ptr);
};
template <>
void Widget::processPointer<void>(void*) = delete;

Reference

  • Effective Modern C++: 条款11: 优先选用删除函数,而非private未定义函数

http://www.ppmy.cn/news/1024877.html

相关文章

Golang通过alibabaCanal订阅MySQLbinlog

最近在做redis和MySQL的缓存一致性&#xff0c;一个方式是订阅MySQL的BinLog文件&#xff0c;我们使用阿里巴巴的Canal的中间件来做。 Canal是服务端和客户端两部分构成&#xff0c;我们需要先启动Canal的服务端&#xff0c;然后在Go程序里面连接Canal服务端&#xff0c;即可监…

网易互娱出海之旅:大数据平台上云架构设计与实践

2020 年初&#xff0c;随着网易互娱的海外业务增长与海外数据合规的需求&#xff0c;我们开始了网易互娱大数据离线计算平台迁移出海的工作。前期&#xff0c;我们采取了云主机裸机加上高性能 EBS 块存储的方案。但是&#xff0c;这个方案存储费用高昂&#xff0c;成本是国内自…

【论文阅读】DEPCOMM:用于攻击调查的系统审核日志的图摘要(SP-2022)

Xu Z, Fang P, Liu C, et al. Depcomm: Graph summarization on system audit logs for attack investigation[C]//2022 IEEE Symposium on Security and Privacy (SP). IEEE, 2022: 540-557. 1 摘要 ​ 提出了 DEPCOMM&#xff0c;这是一种图摘要方法&#xff0c;通过将大图划…

Zip压缩包有密码,如何删除?

Zip压缩包设置设置了密码&#xff0c;想要删除密码&#xff0c;除了将压缩包解压出来之后再将文件压缩为不带密码的压缩文件以外&#xff0c;还有一种删除密码的方法。设置方法如下&#xff1a; 右键点击zip文件&#xff0c;找到打开方式&#xff0c;以Windows资源管理器方式打…

【Pandas 入门-2】增加,删除与合并数据 concat, merge

文章目录 1.3 增加&#xff0c;删除与合并数据1.3.1 增加数据1.3.2 删除数据1.3.3 合并数据 1.3 增加&#xff0c;删除与合并数据 1.3.1 增加数据 在原数据末尾增加一列时&#xff0c;语法为 df[‘新列名] 某个值或某个元素个数与 DataFrame 列数相同的列表&#xff0c;例如…

数据结构初阶--二叉树的链式结构

目录 一.二叉树链式结构的概念 二.二叉树链式结构的功能实现 2.1.链式二叉树的定义 2.2.链式二叉树的构建 2.3.链式二叉树的遍历 2.3.1.先序遍历 2.3.2.中序遍历 2.3.3.后序遍历 2.3.4.层序遍历 2.4.链式二叉树的求二叉树的结点数量 法一&#xff1a;计数法 法二&a…

MIL-STD-1553B 双通道单功能4M功能模块

双通道MIL-STD-1553B总线通讯模块 32bi&#xff0c;33 MHz CPCI/PCI/总线 每个通道为A、B双冗余总线 单功能可设置BC/RT/BM一种工作模式 数据传输率&#xff1a; 4Mbps 支持32位时标&#xff0c; 时标精度0.25微秒 软件可设詈应答超时&#xff1a; 0-32767s 大容量的数…

有没有推荐的golang的练手项目?

前言 下面是github上的golang项目&#xff0c;适合练手&#xff0c;可以自己选择一些项目去练习&#xff0c;整理不易&#xff0c;希望能多多点赞收藏一下&#xff01;废话少说&#xff0c;我们直接进入正题>>> 先推荐几个教程性质的项目&#xff08;用于新手学习、巩…