Effective C++读书笔记之了解C++默默编写并调用哪些函数

本文讲解了C++中编译器如何自动声明类的成员函数,包括默认构造函数、拷贝构造函数、赋值操作符及析构函数,并讨论了它们的作用及限制。

 1,编译器会自动声明的类的成员函数
 在一个类中,如果你没有声明copy构造函数,copy assignment操作符,和析构函数以及任何形式的构造函数。C++编译器会为这个类声明上述函数的编译器版本的。它们都是public且inline的。而且只有这些函数被调用时,它们才会被编译器创建出来,即给出它们的定义式

例如:
 class Empty{};        //一个空类
 上面的声明和下面的声明一样
 class Empty{
      pulbic:
              Empty() {...}                                           //default构造函数
              Empty(const Empty& rhs) {...}           //copy构造函数
             ~Empty() {...}                                          //析构函数
             Empty& operator=(const Empty& rhs) {...}      //copy assignment操作符
 }

2,编译器创建的函数能完成什么工作
 1) default构造函数和析构函数主要是给编译器提供了一个机制,让它调用base class和non-static成员变量的构造函数和析构函数
 2) copy构造函数和copy assignment操作符,编译器版本只是单纯地将来源对象的每一个non-static成员变量拷贝到目标对象。
 具体的过程就是针对类中对象成员调用这个对象的copy构造函数,对于内置类型、如int,则拷贝源对象的每一个bit来完成初始化
 需要注要的是:
 1) 如果你打算一个内含reference成员或者内含const成员的class中支持赋值操作(assignment),则必须自己定义copy assignment操作符函数。
 2) 如果base class中的copy assignment操作符函数是private的,则编译器不会为其的派生类提供copy assignment操作符函数,因为派生类编译器版本的copy assignment操作符函数必须要调base class的copy assignment操作符函数,可是它是private,所有不能调用,所以编译器不会为这样的派生类提供copy assignment操作符函数。

总结:
 编译器厅以暗自为class创建default构造函数,copy构造函数,copy assignment操作符,以及析构函数

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值