透彻理解C++11新特性:右值引用、std::move、std::forward
2020-04-30 22:59
946 查看
[toc]
C++11出现的右值相关语法可谓是很多C++程序员难以理解的新特性,不少人知其然而不知其所以然,面试被问到时大概就只知道可以减少开销,但是为什么减少开销、减少了多少开销、什么时候用...这些问题也不一定知道,于是我写下了这篇夹带自己理解的博文,希望它对你有所帮助。
# 浅拷贝、深拷贝
---
在介绍右值引用等概念之前,可以先来认识下浅拷贝(shallow copy)和深拷贝(deep copy)。
这里举个例子:
```cpp
class Vector{
int num;
int* a;
public:
void ShallowCopy(Vector& v);
void DeepCopy(Vector& v);
};
```
- 浅拷贝:按位拷贝对象,创建的新对象有着原始对象属性值的一份精确拷贝(但不包括指针指向的内存)。
```cpp
//浅拷贝
void Vector::ShallowCopy(Vector& v){
this.num = v.num;
this.a = v.a;
}
```
- 深拷贝:拷贝所有的属性(包括属性指向的动态分配的内存)。换句话说,当对象和它所引用的对象一起拷贝时即发生深拷贝。
```cpp
//深拷贝
void Vector::DeepCopy(Vector& v){
this.num = v.num;
this.a = new int[num];
for(int i=0;i
相关文章推荐
- [转载]如何在C++03中模拟C++11的右值引用std::move特性
- C++11:深入理解右值引用,move语义和完美转发
- c++11 中的右值引用、 move 、 forward
- C++11右值引用和std::move语句实例解析
- C++11特性:右值引用与move语义
- c++11 右值引用、move、完美转发forward<T>
- C++11右值引用和std::move语句实例解析(推荐)
- C++11:深入理解右值引用,move语义和完美转发
- C++11之右值引用、完美转换(Perfect Forwarding)、std::move
- Item 25: 对右值引用使用std::move,对universal引用则使用std::forward
- Item 25: 对右值引用使用std::move,对universal引用则使用std::forward
- C++11新特性:std::move()和std::forward()
- C++11特性--右值引用,移动语义,强制移动move()
- 条款25:对右值引用使用std::move,对统一引用使用std::forward
- Effective Modern C++ 条款25 对右值引用使用std::move,对通用引用使用std::forward
- C++11:深入理解右值引用,move语义和完美转发
- C++11 标准新特性: 右值引用与转移语义
- [c++] 浅析C++11右值引用和move语义
- C++11中的右值引用及move语义编程
- C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward