有的类对象是独一无二的,不希望有复制函数,又因为如果不声明复制函数会自动生成复制函数,所以要明确拒绝。

两种不同方法

方法一


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:明确拒绝编译器自动生成的函数相关推荐

  1. Effective C++ 之 Item 6 : 若不想使用编译器自动生成的函数,就该明确拒绝

    Effective C++ chapter 2. 构造 / 析构 / 赋值运算 (Constructors, Destructors, and Assignment Operators) Item 6 ...

  2. C++若不想使用编译器自动生成的函数,就该明确拒绝

    C++若不想使用编译器自动生成的函数,就该明确拒绝 为什么要拒绝? 将copy构造函数或copy assignment操作符声明为private,并且不定义 使用delete(C++11 ) 为什么要 ...

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

    如果自己定义的类中并不需要copy assignment操作符或者copy构造函数,为了避免编译器自动生成 因为编译器自动生成的没什么用,一般是按照顺序进行赋值或者拷贝,对于有对象内含有指针的话可能会 ...

  4. Effective C++_笔记_条款06_若不想使用编译器自动生成的函数,就该明确拒绝

    (整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 通常如果你不希望class支持某一特定机能,只要不声明对应函数就 ...

  5. Effective C++ -----条款06:若不想使用编译器自动生成的函数,就该明确拒绝

    为驳回编译器自动提供的功能,可将相应的成员函数声明为private并且不予实现. 使用像Uncopyable这样的base class也是一种做法(即先声明一个基类,然后私有继承它).这其实有点像使用 ...

  6. [EffectiveC++]item06:若不想使用编译器自动生成的函数,就该明确决绝

    转载于:https://www.cnblogs.com/jeanschen/p/3224542.html

  7. mysql的自动编码_mysql 自动生成编号函数

    根据需求,保存表数据时需要自动生成一个编号,格式如:AA-2020-03-31-0001  (AA-yyyy-MM-dd-序号).数据库用的mysql,所以创建一个mysql函数. 1.建表: cre ...

  8. mysql生成序列_mysql 自动生成编号函数

    根据需求,保存表数据时需要自动生成一个编号,格式如:AA-2020-03-31-0001  (AA-yyyy-MM-dd-序号).数据库用的mysql,所以创建一个mysql函数. 1.建表: cre ...

  9. php 直接显示缩略图,PHP自动生成缩略图函数的源码示例

    一个简单但功能比较完善的自动生成缩略图的函数,可以按需要对图片进行缩放.裁切.锁定宽或高.使用空白填充 以下为源码,比较简单,相信很容易看明白,记得打开 GD 库的支持哦: /** * 生成缩略图 * ...

最新文章

  1. .exe已停止工作_这几天我遇到了前所未有的问题windows10 1809 explorer.exe资源管理器频繁崩溃...
  2. DCMTK:数据字典测试程序
  3. java advance_JavaAdvance
  4. [BUUCTF-pwn]——jarvisoj_level4
  5. 乙级(Basic Level) 1009 数字黑洞
  6. 【批处理】windows环境将文件放置在虚拟盘
  7. javascript中正则表达式和ruby中的一点差异
  8. Web项目(四)————异步队列的实现
  9. 推荐系统(Recommendation system )
  10. k8s 1.16安装metrics server
  11. Swift - 动画效果的实现方法总结(附样例)
  12. 语音计算机怎么切换音乐模式,怎么实现一个设备播放一个程序的声音呢?
  13. YOLO1、YOLO2、YOLO3对比
  14. OpenHarmony代码下载编译流程记录
  15. 全球顶级黑客对决AI GeekPwn2017黑客大赛看点曝光
  16. Failed to declare queue(s):[XXX]问题解决
  17. P1419 寻找段落
  18. 云管平台监控实践分享
  19. 枪火重生灵界狂潮攻略 (二)老虎流派
  20. 天猫页面之一(公共页面)

热门文章

  1. 让你的sublime text写C代码 (sublime text 2 配置构建C开发环境)
  2. Android 学习--ListView 的使用(一)
  3. python精度_通过Python可以达到的最高时间精度范围是多少?
  4. 【论文写作】网上办公自动系统中功能需求如何写
  5. asp access服装商城计算机设计网站作品
  6. java功能性需求分析_Java-CS-Record/3、结构化需求分析.md at main · yzx66-net/Java-CS-Record · GitHub...
  7. 小车自动往返工作原理_请把小车自动往返控制线路的工作原理描述一下。
  8. java中的技术_Java中的四个核心技术思想
  9. oracle 10g 扩表空间,Oracle 10g 表空间管理(一)
  10. c 连接mysql总是失败_Windows 下用C++连接MYSQL失败