C++概念学习(一)

左值和右值

左值: 拥有身份的对象,有持久的内存地址,可以在多行代码中持续访问,可以取地址
右值: 表达式是临时结果,核心特点是可被移动,不可以取地址

常见的右值类型

  1. 字面量: 42, true, ‘c’, “hello”
  2. 函数返回的非引用临时值
1
2
3
4
5
std::string get_string(){
return "hello world"; // 返回一个临时对象,是右值
}

std::string str = get_string(); // get_string()的返回值是右值
  1. 表达式的临时对象
1
2
int a=1, b=2;
int c = a + b; // a+b的结果是临时整数,是右值

拷贝构造和赋值操作符

为什么需要

当你的类直接管理资源时,类内部直接管理着手动释放的资源

五法则 c++11及以后

  1. 当你需要显式声明其中一个,就需要将五个都声明
1
2
3
4
5
1. 析构函数
2. 拷贝构造函数
3. 拷贝赋值操作符
4. 移动构造函数
5. 移动赋值操作符

最佳实践 零法则

优先使用标准库的资源管理类来包装资源,尽量用标准库的容器和智能指针来管理资源,而不是用裸指针