C++拷贝赋值与移动赋值函数
Posted COCO_PEAK_NOODLE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++拷贝赋值与移动赋值函数相关的知识,希望对你有一定的参考价值。
1、拷贝赋值与移动赋值函数(operator=)
- 注意赋值函数不能使用初始化列表,这里要搞清楚2个概念,初始化和赋值
int main
//初始化
int a = 3;
//赋值
a = 5;
- 通常来说返回当前类型的引用
为什么?为了方便连续赋值
int x = y = z = 1;
定义一个类
class Str
Str() = default;
//默认的拷贝构造函数
Str(const Str&) = default;
//默认的移动构造函数
Str(Str&& ) = default;
//拷贝赋值函数
Str& operator=(const Str& x)
//移动赋值函数,注意没有const
Str& operator=(Str&& x)
int main()
Str a;
//调用拷贝构造
Str b = a;
Str c;
//调用拷贝赋值
c = a;
//调用移动构造
Str d = std::move(a);
//调用移动赋值函数
Str e;
e = std::move(a);
- 在一些情况下编译器会自动合成,见面会有个表格展示什么时候会自动合成。
2、析构函数
其实主要没有什么太多的重点,就是变量使用完,是否还有一些人为的主动性的工作。注意内存回收是在调用完析构函数之后才进行的。
- 用于释放资源
- 析构函数通常不能抛出异常
- 除非显示申明,否则编译器会自动合成一个,其内部逻辑为平凡的。
以上是关于C++拷贝赋值与移动赋值函数的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer笔记14---chapter13 拷贝控制1
c++复习笔记——右值引用(概念,使用场景),移动拷贝构造函数,赋值拷贝构造函数。