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++复习笔记——右值引用(概念,使用场景),移动拷贝构造函数,赋值拷贝构造函数。

c++复习笔记——右值引用(概念,使用场景),移动拷贝构造函数,赋值拷贝构造函数。

移动构造函数和移动赋值与拷贝构造函数和赋值构造函数的比较

C++之拷贝构造与拷贝赋值

拷贝控制——拷贝赋值与销毁