条款05:了解C++默默编写并调用哪些函数

如果没有为类定义构造函数、析构函数、拷贝构造函数、重载赋值操作符,并且这些函数被需要(调用)时,编译器会为类生成默认的函数,而这些函数是public inline的。

需要主意的是带引用成员的类和带const成员的类。

带引用成员的类,如果不为其主动编写operator=,则对象之间的赋值操作是不能编译通过的;

带const成员的类,如果不为其编写operator=,则对象之间的赋值是不能通过编译的。

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

根据条款05我们知道编译器会为类(在一定条件下)创建默认的构造、析构、拷贝构造、operator=函数,而当我们明确不需要编译器自作多情时,就该明确告诉编译器:别费劲了,老子有主了~   即把这些函数声明(可以只声明而不定义)为private的。

当然这种方法并不保险,因为成员函数和friend函数仍然可以访问到这些函数,我们可以谨慎的不在成员函数和friend函数中对其进行调用(这一点,当只声明而不定义这些函数的时候,linker会帮助我们把不期望的调用找出来)。

另一种方法:

定义一个基类,该基类的作用是把不想让编译器自动生成的函数在该基类中声明为private的,然后让其他类继承该基类。

当客户端在我们的类没有主动定义一个这样的函数的时候去调用这些函数事,则编译器会自动生成对应的函数,而其【编译器生成版本】会尝试调用基类的对应兄弟而就会被决绝(private)。

改善程序与设计的55个具体做法 day2的更多相关文章

  1. 改善程序与设计的55个具体做法 day9

    条款23:宁以non-member.non-friend替换member函数 即 以非成员函数 非友元函数 替换成员函数. 直观上,面向对象应该尽可能的封装,封装数据.封装操作等等,所以这个条款可能有 ...

  2. 改善程序与设计的55个具体做法 day7

    条款18:让接口容易被正确使用,不易被误用 这里说的接口是广义上的接口,即包括但不限于函数接口.类接口.template接口等,每一种接口都是客户与你的代码进行交互的手段. 我们对客户的所谓“资质或水 ...

  3. 改善程序与设计的55个具体做法 day3

    条款07:为多态基类声明virtual析构函数 任何一本C++语法教材上都会讲这一点(如果没讲,扔掉它),这么做到原因是可以让delete pBase操作能够正确的执行子类的析构函数. 需要说明的是当 ...

  4. 改善程序与设计的55个具体做法 day8

    条款20:宁以pass-by-reference-to-const 替换 pass-by-value 即 以const引用 替换值传递. 采用引用传递参数时,底层往往是用指针方式实现,因此参数传递内置 ...

  5. 改善程序与设计的55个具体做法 day6

    条款13:以对象管理资源 资源,包括但不限于内存.句柄.GDI对象.数据库连接等. 内存要记得释放,句柄要记得closehandle, GDI对象要记得删除,数据库连接要记得关闭,等等等等. 以对象来 ...

  6. 改善程序与设计的55个具体做法 day5

    条款12:复制对象时勿忘其每一个成分 这里的复制是拷贝构造和operator= 每一个成分有几个维度: 1.每个成员变量 这个很好理解,添加新的成员时也要记得为每个新添加的成员执行合适的复制操作 2. ...

  7. 改善程序与设计的55个具体做法 day4

    今天晚上回到小区门口,买了点冬枣,要结账的时候想起来,钥匙没带,落公司了! TNND,没办法再回趟公司,拿了钥匙,来回一个小时,汗~ 条款10:令operator=返回一个reference to * ...

  8. 改善程序与设计的55个具体做法 day1

    博客好久没更新了,就从这本读书笔记开始吧. 条款01: 视C++为一个语言联邦 C++可视为有四个次语言组成的: 1.C语言 2.Object-Oriented C++ (面向对象C++) 3.Tem ...

  9. 重构HTML改善web应用设计

    本文从良构,有效性,布局三个角度,结合往日项目开发经历, 整理总结重构HTML改善Web应用设计的几点规则和做法.部分参考自<重构HTML改善Web应用设计>. 重构.什么是重构?为什么要 ...

随机推荐

  1. JavaScript字符编解码

    示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...

  2. Jenkins与Docker相关的Plugin使用

    原文地址:http://blog.csdn.net/ztsinghua/article/details/52128140 Jenkins与Docker相关的Plugin 在Jenkins Plugin ...

  3. Jenkins Docker 插件

    原文地址:https://wiki.jenkins.io/display/JENKINS/Docker+Plugin Created by magnayn -, last modified by Ni ...

  4. sql2000实现row_number

    一.以PersonID,classid,dt_ClassData为条件进行分组,每个小组加序号,row_number在sql2005中不可用 方法一.sql2000及以上版本--以PersonID,c ...

  5. 转:Exception loading sessions from persistent storage

    直用tomcat一段时间都正常无事,最近一次启动tomcat就发生以下异常: 严重: IOException while loading persisted sessions: java.io.EOF ...

  6. leetcode第一刷_Binary Tree Zigzag Level Order Traversal

    以出现的频率来看.树的层序遍历一定是考察的重点,除非工作人员想找题水数量. zigzag,还是有几道题的,层序的这个非常easy,假设是奇数层.reverse下面就可以.无他.我写的时候预计还不知道这 ...

  7. Atitit.远程接口 监控与木马   常用的api 标准化v2 q216

    Atitit.远程接口 监控与木马   常用的api 标准化v2 q216 1. 木马与远程接口 监控的常用的api2 1.1. 文件复制2 1.2. 屏幕定时截图2 1.3. 邮件发送2 1.4.  ...

  8. zabbix api调用

    zabbix api调用 api能干什么 Zabbix API allows you to programmatically retrieve and modify the configuration ...

  9. Mybatis_遇到的问题汇总

    1.The setting logImpl is not known 我在参考某个网站学习mybatis时,出现这个错误,后来找到的原因是因为mybatis的版本(3.1.1)太低,换成3.3.1就没 ...

  10. Power of Cryptography - poj 2109

      Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 20351   Accepted: 10284 Description C ...