Effective C++ 读书笔记(5)

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

是否处在空的类?假设定义类为class Empty{};当C++编译器处理过后会变成如下的形式:

class Empty{
	Empty(){}
	~Empty(){}
	Empty& operator=(const Empty& rhs){.....}
	Empty(const Empty& rhs){.....}
}

可以分别称为构造函数,析构函数,赋值构造函数,复制构造函数!注意后面两个的区别,从字面上将只有对象存在的

情况下才能被赋值,相反的在对象以其他相同对象构造的时候调用的是复制构造函数;例如

People lhs;
People rhs("whz");
lhs = rhs;
people zhs(rhs)

第一个调用的是赋值构造函数,后面调用的是复制构造函数!系统生成的赋值构造函数和复制构造函数只是单纯的将对

像的成员变量进行赋值,没有任何的检查操作,例如对于上面提到的类People,当调用赋值或者复制操作的时候,只是单纯的将

右边对象的对应三个成员变量赋值给左边对象的三个成员变量!

在有些情况下编译器会阻止产生赋值构造函数和复制构造函数,例如当函数的成员变量中存在引用变量或者const变量的

时候,因为此时编译器不知道怎样将右边的对象的相应成员赋值给左边的成员,此时要主要构造函数中对于const或者引用的成

员一定要采用初始化列表的形式,不然会出错!例如对于下面的类将不会产生对应的赋值或者复制构造函数:

class People{
private:
    const int age;
    Addredd& addr; 
    .......
public:
    ......
}

请记住:

  • 编译器会默认为class创建构造函数,析构函数,copy构造函数以及copy assignment操作符!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值