C++学习笔记5 拷贝复制相关

本文深入探讨C++中的拷贝构造函数、拷贝赋值运算符、三/五原则以及noncopyable模式。详细解释了行为像值和指针的类如何处理拷贝和赋值,并介绍了copy and swap技术。同时,文章涵盖了对象移动的概念,包括右值引用、标准库move函数、移动构造函数和移动赋值运算符,揭示了它们在资源管理中的重要性。
摘要由CSDN通过智能技术生成

C++学习笔记5

1. 拷贝构造函数

class Com{
public:
    Com();	//默认构造函数
    Com(const Com& );	//拷贝构造函数
};

拷贝构造函数的参数必须是引用类型。为什么如此呢?加入不是引用类型,当我们拷贝初始化的时候,需要将实参拷贝到形参,但为了拷贝实参,我们又必须调用拷贝构造函数,如此循环。

string dots(10, '.');					//直接初始化
string s(dots);							//直接初始化
string s2 = dots;						//拷贝初始化
string null_book = "9-999-9999-9"		//拷贝初始化
string nines = string(100, '9');		//拷贝初始化

当使用直接初始化时,我们实际上是要求编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数。当我们使用拷贝初始化时,我们要求编译器将右侧运算对象拷贝到正在创建的对象中。拷贝初始化通常使用拷贝构造函数,但如果存在移动构造函数的化,也会使用移动构造函数。

2. 拷贝赋值运算符

class Com{
public:
    Com();
    Com& operator=(const Com&);
};

通常,赋值运算符会返回一个指向其左侧运算对象的引用。

3. 三/五原则

如果一个类需要析构函数,那几乎肯定也需要拷贝构造函数和拷贝赋值运算符。

如果一个类需要拷贝构造函数,则几乎肯定需要拷贝赋值运算符,反之亦然。但这都不以为这一定需要析构函数。

4. noncopyable

构造函数在protected下,我们既可以防止该类被构建,又可以使得该类能够作为基类,被继承。

class noncopyable{
protected:
    noncopyable() = default;	//使用合成的默认构造函数
public:
    noncopyable(const noncopyable&) = delete;			//阻止拷贝
    noncopyable& operato
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值