Effective C++(6) 如何拒绝编译器的自动生成函数
如果不希望class支持某一成员函数,那么不声明和定义它就可以了,但是这一策略对与拷贝构造函数和重载赋值操作符并不起作用。因为如果不声明它们,那么当尝试调用它们的时候,编译器会为你声明和定义它们。这显然不是你所希望看到的。
编译器自动生成的函数都是public声明一个函数可以阻止编译器自动生成该函数令这个函数为private可以阻止人们调用它
缺陷:
member函数或friend函数可以调用它们,导致链接错误。
Demo:
class HomeForSale {
public:... ...
private:...HomeForSale(const HomeForSale&);HomeForSale& operator=(const HomeForSale&);
};
class Uncopyable {
protected:Uncopy() {}~Uncopy() {}
private:Uncopyable (const Uncopyable&);Uncopyable& operator=(const Uncopyable&);
};
// 为了阻止编译的自动生成,我们唯一需要做的就是继承Uncopyableclass HomeForSale: private Uncopyable {......
};
原理:
当尝试拷贝操作时,编译器会尝试调用父类的对应的拷贝构造函数和重载赋值操作符,这些调用会被编译器拒绝,因为其base class的拷贝函数是private从而报出编译错误。
小结:
转载于:https://www.cnblogs.com/suzhou/p/3638966.html
Effective C++(6) 如何拒绝编译器的自动生成函数相关推荐
- 怎么证明未显式定义构造方法时,编译器会自动生成无参的构造方法?
在和类和对象篇提到: 当没有显式定义构造方法,编译器会自动提供一个没有参数的构造方法 若类中显式定义了构造方法,则默认的无参构造不再产生 本篇博客就带大家一起来验证~ 首先,显式定义构造方法:即 自己 ...
- C语言一定要有函数声明吗,1 什么是C语言的隐式函数声明在C语言中,函数在调用前不一定非要声明。如果没有声明,那么编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。下...
1 什么是C语言的隐式函数声明 在C语言中,函数在调用前不一定非要声明.如果没有声明,那么编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码.下面是一个例子: int main(int ...
- PyCharm 不能自动生成函数注释
PyCharm 中可以在新建文件自动生成文件头注释,实现自动生成运行环境,作者.日期等必要信息,使用比较方便,配置十分简单,具体设置可参考这篇博客. 另外,PyCharm在定义函数之后,可以自动生成包 ...
- 条款6:明确拒绝编译器自动生成的函数
有的类对象是独一无二的,不希望有复制函数,又因为如果不声明复制函数会自动生成复制函数,所以要明确拒绝. 两种不同方法 方法一 class HomeForSale:private Uncopyable{ ...
- java自动生成函数注释_IDEA类和方法注释自动生成(2019-08-31 21:47写)
1. 生成类注释 打开Preferences-->Editor-->File and Code Templates,右侧选择Filestab页,找到Class.Interface,可以看到 ...
- [python]pycharm自动生成函数注释
函数涉及到多个参数的时候注释是一个不可或缺的好帮手,手动生成参数又是一件比较费事的事情,我们能想到的pycharm也替我们想到了,并给出了比较不错的解决方案,一次设置长期有效: 设置方法也比较简单: ...
- pycharm自动生成函数调用图
pycharm自动生成函数调用图 1.下载并安装graphviz 1.1 下载链接:https://graphviz.gitlab.io/_pages/Download/windowshiyo那个s/ ...
- 解决Pycharm不能自动生成函数注释
PyCharm在定义函数之后,可以自动生成包括参数和返回值在内的注释,具体使用方法为: 函数定义后,另起一行,输入三对引号(单引号和双引号均可),后回车 def f(b,c): ''' 输出结果为 d ...
- pycharm自动生成函数注释及注意事项
不少博客都说过怎么生成注释,但是照着别人的博客自己实践不少次才成功,简单记录下 首先,检查pycharm的设置: 如果这里是plain的话,需要先改成其他的选项 其次,假如有个函数如下: def fu ...
- 主键字母自动生成函数
-- 动态生成字母方式主键,A-Z 大于Z自动进位[26进制数值表示]-- 参数:动态查询表和主键列 create or replace function charkey (tabName char, ...
最新文章
- url传递中文的解决方案
- github登陆方案
- Unity2D游戏开发基础教程1.2项目、资源和场景
- 【译】光线跟踪:理论与实现(一) 简介
- 经典C语言程序100例之九零
- 一份关于.NET Core云原生采用情况调查
- 您在2016年会做什么? Apache Spark,Kafka,Drill等
- 专升本c语言名词解释题_专升本到底难不难?
- 安装nokogiri前提
- 我知道真相,但我仍然勇往直前
- Hibernate之HQL查询
- 杭电acm1000c语言答案,c语言,杭电acm1328这题怎么做啊,求提示!!!
- SPSS安装激活教程(包含网盘链接)
- js页面刷新事件 ,Javascript刷新页面的几种方法
- 计算机毕业设计ssm民宿预定管理系统20sxh系统+程序+源码+lw+远程部署
- 随机梯度下降法与批处理梯度下降法
- 镭速关于高速数据传输的介绍!
- WEB——07JDBC
- 用友修改了变量不能连接到服务器,用友T3客户端登录提示 运行时错误91:未设置对象变量...
- QT操纵excel详解2:实现对excel的全面控制
热门文章
- 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_26-页面查询接口测试-Postman...
- extern 头文件 定义声明
- C11简洁之道:函数绑定
- day03_01 Python历史、32bit和64bit系统的区别
- POJ 1300 Door Man 欧拉路的判断
- A*算法 带cocos2d-x例子 a*寻路算法
- JS 使用RSA加密解密
- Java内存溢出定位和解决方案(new)
- leetcode 181	 Employees Earning More Than Their Managers 不会分析的数据库复杂度
- jQuery的对象访问函数(get,index,size,each)