条款6:若不想使用编译器自动生成的函数,就该明确拒绝

 有些场景我们不需要编译器默认实现的构造函数,拷贝构造函数,赋值函数,这时候我们应该明确的告诉编译器,我们不需要,一个可行的方法是将拷贝构造函数和赋值函数声明为private。

class HomeForSale { ... };
HomeForSale h1;
HomeForSale h2;
HomeForSale h3(h1); 	// 试图拷贝h1,应该阻止编译通过
h1 = h2; 		// 试图拷贝h2,应该阻止编译通过

每一栋房子都不同,这样的拷贝不应该支持。
但是这样也会存在一个问题,因为成员函数和友元函数仍然可以调用私有函数。

class HomeForSale {
public:...
private:...HomeForSale(const HomeForSale&); // 只有声明,不提供定义HomeForSale& operator=(const HomeForSale&);
};

 我们可以使用上面的类定义,编译器将阻止客户端拷贝HomeForSale对象的尝试,如果无意中试图在成员函数或友元函数中这样做,链接器将会报错。

class Uncopyable {
protected: // 允许派生类对象的构造和析构Uncopyable() {} ~Uncopyable() {} 
private:Uncopyable(const Uncopyable&); // ...但不允许拷贝Uncopyable& operator=(const Uncopyable&);
};
class HomeForSale : private Uncopyable { //不再声明拷贝构造函数或拷贝赋值运算符};

在这里插入图片描述
在c++11的标准中我们可以使用delete来删除函数,这样在编译的时候就会提示错误。
在这里插入图片描述
 要禁用编译器自动提供的功能,请将相应的成员函数声明为private并且不提供任何实现。使用像Uncopyable这样的基类是一种方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/289257.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux、widnows的免费局域网桌面远程工具之NoMachine

统信UOS、银河麒麟及其他的linux桌面系统/windows系统都可进行远程桌面操作使用。 1.先到官网下载https://downloads.nomachine.com/自己使用的软件版本。 2.首先下载windwos端的的版本64位进行安装,安装是先暂时退出windows的杀毒软件,以免提示你各种确…

Clonable 接口和深拷贝

Object 类中存在一个 clone 方法, 调用这个方法可以创建一个对象的 “拷贝”. 想用clone方法时报错了,查看一下: clone方法被protected修饰.不同包只能在子类中访问,可以用super关键字访问clone方法返回类型是Object,所以需要向下转型CloneNotSupportedException是受查异常…

FormData文件上传多文件上传

一、简介 ​ 通常情况下,前端在使用post请求提交数据的时候,请求都是采用application/json 或 application/x-www-form-urlencoded编码类型,分别是借助JSON字符串来传递参数或者keyvalue格式字符串(多参数通过&进行连接&#…

React 中的 ref 和 refs:解锁更多可能性(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

算法分析与设计课后练习29

给定集合S{3, 7, 5, 9}, C 20, 近似参数 ε0.2, 写出 近似算法求解子集和问题的过程。

ThinkPad E550c

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

喜讯丨思码逸正式加入北京信创工委会!

近日,经北京信息化协会信息技术应用创新工作委员会(以下简称“北京信创工委会”)投票表决,研发效能行业领先者北京思码逸科技有限公司(简称:思码逸)正式加入“北京信创工委会”,成为…

国产670亿参数的DeepSeek:超越Llama2,全面开源

模型概述 DeepSeek,一款国产大型语言模型(LLM),凭借其670亿参数的规模,正引领着人工智能领域的新浪潮。这款模型不仅在多项中英文公开评测榜单上超越了700亿参数的Llama 2,而且在推理、数学和编程能力方面…

计算机网络(3):数据链路层

数据链路层属于计算机网络的低层。 数据链路层使用的信道主要有以下两种类型: (1)点对点信道。这种信道使用一对一的点对点通信方式。 (2)广播信道。这种信道使用一对多的广播通信方式。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这…

Hive入门+部署

看黑马视频做的笔记 目录 概念 1.基本概述 2.基础架构 总架构 部署 1.安装MySQL 2.配置Hadoop 3.下载解压Hive 4.下载MySQL Driver包 注意! 5.配置Hive 6.初始化元数据库 7.启动Hive(使用Hadoop用户) 实例 查看HDFS上表中存…

Axure中继器的基本使用

介绍中继器 在 Axure 中,中继器是一种交互设计元素,用于在不同页面之间传递数据或触发特定的事件。它可以帮助模拟真实的用户交互流程和页面之间的传递逻辑,继承关系用于描述两个元件之间的父子关系。通过使用继承关系,您可以创建…

BBS项目--登录

BBS阶段性测试总要求 django登录报错 Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。 原因分析:出现这种情况在Windows中很常见,就是端口被占用 解决措施:这时我们只需改一下端口便可以了 登录前端页面(HTML…