effective c++ 第三版 读书笔记2

5:了解C++默默编写并调用哪些函数

1 当创建空类时,编译器就会为它创建一个copy构造函数、一个copy assignment操作符和一个析构函数

此外,如果没有声明构造函数的话,编译器会为我们生成一个default构造函数

 

例:

class Empty { };

实际:

class Empty

{

public:

Empty() { ... }

Empty(const Empy& ths) { ... }

~Empty() { ... }

 

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

};

 

2 当类内含有 const 或者 reference 成员变量时,调用编译器生成的 copy assignment操作符失败,需自定义=操作符

3 当基类的copy assignment 不可调用或者为private时,无法调用子类的copy assignment操作符

 

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

讲相应的函数声明成private,并不予实现

 

Uncopyable 类使用:

class Uncopyable{

protected:

Uncopyable() { }

~Uncopyable() { }

private:

Uncopyable(const Uncopyable&);

Uncopyable& operator=(const Uncopyable&);

};

 

把类从Uncopyable类继承,由于基类Uncopyable的copy构造和 copy assignment 都为private,迫使子类调用这2个函数不成功,从而达到不能copy 的效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值