条款6:明确拒绝编译器自动生成的函数
有的类对象是独一无二的,不希望有复制函数,又因为如果不声明复制函数会自动生成复制函数,所以要明确拒绝。
两种不同方法
方法一
class HomeForSale:private Uncopyable{private:HomeForSale(const HomeForSale &);HomeForSale &operator=(const HomeForSale &);
};
将默认的复制构造函数和操作符重载函数声明为private。这样类外调用时编译器会报错。
类内的函数或者友元函数调用时,连接器会报错。
方法二
如果在编译器就报错是更好的,可以尝试构造一个uncopy的基类。
class Uncopyable{protected:Uncopyable(){}~Uncopyable(){}
private:Uncopyable(const Uncopyable &);Uncopyable& operator = (const Uncopyable&);
};class HomeForSale:private Uncopyable{};
这时因为是私有继承,是不能调用基类中的构造函数,所以编译时就报错。
下面附上不同继承方式的区别。
不同继承方式的区别
条款6:明确拒绝编译器自动生成的函数相关推荐
- Effective C++ 之 Item 6 : 若不想使用编译器自动生成的函数,就该明确拒绝
Effective C++ chapter 2. 构造 / 析构 / 赋值运算 (Constructors, Destructors, and Assignment Operators) Item 6 ...
- C++若不想使用编译器自动生成的函数,就该明确拒绝
C++若不想使用编译器自动生成的函数,就该明确拒绝 为什么要拒绝? 将copy构造函数或copy assignment操作符声明为private,并且不定义 使用delete(C++11 ) 为什么要 ...
- 条款6:若不想使用编译器自动生成的函数,就该明确拒绝
如果自己定义的类中并不需要copy assignment操作符或者copy构造函数,为了避免编译器自动生成 因为编译器自动生成的没什么用,一般是按照顺序进行赋值或者拷贝,对于有对象内含有指针的话可能会 ...
- Effective C++_笔记_条款06_若不想使用编译器自动生成的函数,就该明确拒绝
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 通常如果你不希望class支持某一特定机能,只要不声明对应函数就 ...
- Effective C++ -----条款06:若不想使用编译器自动生成的函数,就该明确拒绝
为驳回编译器自动提供的功能,可将相应的成员函数声明为private并且不予实现. 使用像Uncopyable这样的base class也是一种做法(即先声明一个基类,然后私有继承它).这其实有点像使用 ...
- [EffectiveC++]item06:若不想使用编译器自动生成的函数,就该明确决绝
转载于:https://www.cnblogs.com/jeanschen/p/3224542.html
- mysql的自动编码_mysql 自动生成编号函数
根据需求,保存表数据时需要自动生成一个编号,格式如:AA-2020-03-31-0001 (AA-yyyy-MM-dd-序号).数据库用的mysql,所以创建一个mysql函数. 1.建表: cre ...
- mysql生成序列_mysql 自动生成编号函数
根据需求,保存表数据时需要自动生成一个编号,格式如:AA-2020-03-31-0001 (AA-yyyy-MM-dd-序号).数据库用的mysql,所以创建一个mysql函数. 1.建表: cre ...
- php 直接显示缩略图,PHP自动生成缩略图函数的源码示例
一个简单但功能比较完善的自动生成缩略图的函数,可以按需要对图片进行缩放.裁切.锁定宽或高.使用空白填充 以下为源码,比较简单,相信很容易看明白,记得打开 GD 库的支持哦: /** * 生成缩略图 * ...
最新文章
- 为物联网产业化发展提供坚实保障
- 固态器件理论(4)电子和“空穴”
- [转]新版.Net开发必备十大工具
- pcie转sata3硬盘不启动_没有地方塞硬盘?你或许需要这款扩展卡
- sql中的三元运算符
- CentOS-文件操作
- php获取周几,php怎么获得星期几
- GaussDB(for openGauss)让数据“存得下、算得快、算得准”
- Currency Exchange
- IAR常用快捷键及使用小技巧
- 跟随进度而变色进度条效果ios源码
- ImportError: DLL load failed: %1 不是有效的 Win32 应用程序
- java统计单机次数_java流类,快速统计出字符次数+++
- android office转pdf插件,office另存为pdf插件下载
- 免费复制百度文库的方法
- CH2-Java编程基础(7个案例实现)
- 直播软件开发,直播软件源码+三级分销模式的搭建
- Charles 手机https抓包
- 使用 IKuai 和 DDNSTO 外网访问你的设备(NAS、软路由)
- python实现手机通讯录和学生信息管理系统(4种方法)