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

本文详细介绍了在C++中创建空类时编译器自动生成的默认构造函数、复制构造函数、赋值运算符以及它们的用法。特别强调了当类内包含const或reference成员变量时,需自定义赋值运算符以避免调用编译器生成的版本。同时,通过Uncopyable类展示了如何阻止对象的复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值