01_现代C++特殊成员函数

现代C++特殊成员函数

C++ 98有四个特殊成员函数:默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符。C++11添加了两个函数:移动构造函数、移动赋值运算符。
学习重点: 有必要了解各个函数什么时候自动生成;自动生成的函数有没可能产生预期外的行为;
面试考点: 各个类别的特殊成员函数均有考点,语法使用细节非常关键

特殊成员函数(编译器自动生成)

共6个

  • 构造函数
  • 析构函数
  • 拷贝构造函数
  • 拷贝赋值运算符
  • 移动构造函数
  • 移动赋值运算符

默认构造函数:仅当类不存在用户声明的构造函数是才自动生成

拷贝构造函数:仅当类没有显式声明拷贝构造函数时才自动生成,并且如果用户声明了移动操作,编译器通常不会自动生成默认拷贝构造函数

拷贝赋值运算符:仅当类没有显式声明拷贝赋值运算符时才自动生成,并且如果用户声明了移动操作,编译器通常不会自动生成默认拷贝赋值运算符

移动操作:仅当类没有显式声明移动操作、拷贝操作和析构函数时才自动生成。

函数生成内容口诀:用户声明拷贝不会自动生成移动,用户声明移动不会自动生成拷贝。

C++98有四个特殊成员函数:默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符。 注意 :这几个函数只有在需要的时候才会被生成,比如你在代码中使用了这几个函数但是类中没有明确声明。

C++11添加了两个函数:移动构造函数、移动赋值运算符。

  1. 两个拷贝函数(实现代码)是独立的。即:你只声明了其中的一个拷贝函数,但是在代码中有使用另一个拷贝函数,那编译器也会自动为你生成这个拷贝函数(逐成员拷贝);(c++98和c++11中都是这样的规则)
    • 需要内存管理时,逐成员拷贝会出问题,如不同类对象指向同一个内存地址。
  2. 两个移动函数不是独立的。即:你只声明了其中的一个移动函数,编译器不管你在代码中是否有使用另一个,也不会再帮你生成了;

后面本专栏会针对各个特殊成员函数进行详细讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值