C++ Primer Chapter 13-4
来源:互联网 发布:面试什么是java线程池 编辑:程序博客网 时间:2024/06/07 10:22
1:关于右值引用和左值引用,其实归根结底是保护内存中的数据。
2:move 函数时通知编译器不要调用拷贝构造函数,而调用移动构造函数。
3:移动构造和移动赋值 :这些成员函数参数都是一个右值引用类型。
4:对于移动构造函数 和 移动赋值函数,使用 noexpect 来指出不抛出异常。为什么用 noexpect 是因为这和标准库接口有关,如果不用 noexpect 声明,那么编译器会认为该函数可能会抛出异常。
比如 vector 在增长内存时,是可以用移动构造函数的,但是如果我们定义的类中移动构造函数没有申明 noexpect 就会导致编译器不使用移动构造而改用拷贝构造。因为这样可以保证如果出错了,原始数据可以不被破坏!归根结底还是以保护数据为第一要素。并且保证标准库的高效率!
5:对于移动构造 和赋值,移动后的源对象我们不可以对其进行值操作,但是我们可以对其进行不依赖值的操作。因为其管理的数据内存都被移动到另外一个对象中,所以不能进行该类操作。但是可以被赋值,因为可以把其他对象的内存移动到该对象中。
6:移动后的源对象一定要保证可析构。
7:合成移动构造函数和移动赋值函数,只会在没有定义任何拷贝复制和赋值函数时,且类的每个 非 static 成员可以移动构造时才会生成
8:如果我们有要求编译器生成=default l类型,但是类的成员没有移动构造函数或者移动赋值运算符,而且,那么类就会把移动构造函数和移动赋值函数定义成删除函数。
9:如果我们有要求编译器生成=default l类型,但是类成员为 const 或者是引用 ,那么移动赋值运算符被定义为删除函数。
10:如果类定义了自己的移动构造和移动赋值函数,那么合成的拷贝构造和赋值都会被默认定义为删除的。
11:在赋值时,会根据赋值运算符右侧对象的类型决定调用何种类型,右值则调用移动赋值,左值则运用拷贝赋值。
12:如果没有移动赋值构造函数,那么是右值也是调用拷贝复制,或者拷贝赋值。
0 0
- C++ Primer Chapter 13-4
- C++Primer-Function chapter
- C primer plus -- Chapter 2
- C++ Primer Chapter 4
- C++ Primer Chapter 13-1
- C++ Primer Chapter 13-2
- C++ Primer Chapter 13-3
- C++ Primer Chapter 13-5
- C++ Primer Chapter 7-4
- C++ Primer Chapter 9-4
- C++ Primer Chapter 10-4
- C++ Primer Chapter 14-4
- C++ Primer Chapter 15-4
- c primer plus Chapter 14 p383
- 《C primer plus》笔记--Chapter 1
- C++Primer Chapter One学习笔记
- c primer plus 4th edition Programing Exercises answer(chapter 6)
- c primer plus 4th edition Programing Exercises answer(Chapter 7)
- Java基本数据类型_Boolean
- 在Mac OS X上安装使用lazarus 1.6.4
- C++ Primer Chapter 13-3
- Python中元类的理解
- debian 8.6 jessie 安装 Proxmox VE 安装失败解决方法
- C++ Primer Chapter 13-4
- 工程管理器
- Vue 实现组件 及 组件嵌套
- 求模的逆元
- C++ Primer Chapter 13-5
- 从Windows切换到Linux 一些比较好的软件 持续更新
- session机制
- lock与synchronized区别
- 动态规划:买书