左值和右值
左值: 拥有身份的对象,有持久的内存地址,可以在多行代码中持续访问,可以取地址
右值: 表达式是临时结果,核心特点是可被移动,不可以取地址
常见的右值类型
- 字面量: 42, true, ‘c’, “hello”
- 函数返回的非引用临时值
1 | std::string get_string(){ |
- 表达式的临时对象
1 | int a=1, b=2; |
拷贝构造和赋值操作符
为什么需要
当你的类直接管理资源时,类内部直接管理着手动释放的资源
五法则 c++11及以后
- 当你需要显式声明其中一个,就需要将五个都声明
1 | 1. 析构函数 |
最佳实践 零法则
优先使用标准库的资源管理类来包装资源,尽量用标准库的容器和智能指针来管理资源,而不是用裸指针