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

news/2024/2/29 2:55:35

文章目录

  • 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;用于新手学习、巩…

python读入和读出图像

python提供了PIL库和opencv库对图像进行读取并保存。 图像读入读出 给定一张RGB的彩色图像&#xff0c;PIL库将其读入: import cv2 from PIL import Image # 读入图像 image2 Image.open(cub1.jpg) print(type(image2)) image2_array np.array(image2) print(image2_array…

​LeetCode解法汇总1281. 整数的各位积和之差

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给你一个整数 n&#xff0c;请你帮忙计算并返回该整数「各位数字之积」与「各位…

PHP“牵手”京东商品详情数据获取方法,京东商品详情API接口申请指南

京东详情接口 API 是淘宝开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取淘宝商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在淘宝电商平台的开发中&#xff0c;京东详情接口 API 是非常常用的 API&#xff0c;因此本文将详细介绍京东详情接口 …

记录--浏览器渲染15M文本导致崩溃怎么办

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 最近&#xff0c;我刚刚完成了一个阅读器的txt文件阅读功能&#xff0c;但在处理大文件时&#xff0c;遇到了文本内容过多导致浏览器崩溃的问题。 一般情况下&#xff0c;没有任何样式渲染时不会出现什…

C++初阶之一篇文章教会你list(理解和使用)

list&#xff08;理解和使用&#xff09; 什么是list特点和优势基本操作示例用法与其他序列式容器&#xff08;如 std::vector 和 std::deque&#xff09;相比&#xff0c;std::list 显著的区别和优势成员类型 list构造函数1. default (1)2. fill (2)3.range (3)4. copy (4) li…

【雕爷学编程】Arduino动手做(54)---大按键微动按钮模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

JavaScript中常用处理对象的方法

一.方法 Object.keys(obj) 返回一个包含对象自身所有属性名称的数组。 let person {firstName: "John",lastName: "Doe" }; let keys Object.keys(person); console.log(keys); // 输出: ["firstName", "lastName"]Object.values…

为什么 Mixin 被认为是有害的

为什么 Mixin 被认为是有害的 Mixin 是在 Vue 2 中引入的&#xff0c;作为组件之间共享代码的解决方案&#xff0c;这种方式成为许多代码库不可或缺的一部分。然而&#xff0c;随着时间的推移&#xff0c;它们的使用开始出现问题。尽管 mixins 最初很有吸引力&#xff0c;但现…

HC32L110B6芯片测试

到货之后&#xff0c;直观上感觉的确很小&#xff0c;小包装盒里面还装了说明书。 下载器单独在一个盒里面&#xff0c;但是这个T-U2T没用上&#xff0c;还是用的STLINK。 开发之前先去网上找了一些别人遇到的坑&#xff0c;的确不少。 涉及的方面也是挺全的&#xff0c;供电、…

全排列 II——力扣47

文章目录 题目描述解法题目描述 解法 class Solution {public:vector<int> vis;void dfs(vector<int&

tkinter文件对话框

文章目录 文件对话框文件对象文件类型其他参数 tkinter系列&#xff1a; GUI初步&#x1f48e;布局&#x1f48e;绑定变量&#x1f48e;绑定事件&#x1f48e;消息框扫雷小游戏&#x1f48e;强行表白神器 文件对话框 filedialog提供了多种与文件交互相关的对话框&#xff0c…

python自动化:系统凭据的获取与添加

在自动化流程开发中&#xff0c;我们经常会遇到输入帐号、密码的情况&#xff0c;帐号明文还可以&#xff0c;但是密码不想展示给他人&#xff0c;但是不想自己去手动输入怎么办&#xff1f; 基于以上情况我们可以使用windows自带的凭据管理器进行密码存储&#xff0c;其实我们…
最新文章