std::move
背景
工作原理
std::move()告诉编译器那部分右值不能释放
std::move()本身就是一个语法糖,可以理解就是一个以函数都形式做类型转换。
移动构造函数、移动赋值函数利用引用的引用
如果只是在某个函数里声明并初始化化了&&类型的变量,其实没有什么实际用处。关键是把它用在参数传递的时候,这样可以避免深拷贝、构建临时变量。
举例
Class A;
Func(A&& a);
main()
{
A temp;
Func(std::move(temp));
}
scoped ref
原理
scoped ref 本身只是一个便于在不用资源的时候,自动释放资源的机制。让用户从繁琐、重复的资源管理的工作中解脱出来。
使用它的关键是,需要理解并记住它在什么时候会自动增减引用。
何时自动增减引用
引用计数自动增1的情景
- 基于对象指针构造引用计数对象的时候;
- 基于引用计数对象构造引用计数对象的时候;
- 把对象指针赋值给引用计数对象的时候;
- 引用计数之间相互赋值(之前的引用计数为空);
引用计数自动减1的情景
- 如果之前引用计数对象不为空,析构一个引用计数对象的时候;
引用计数不变的场景
- 引用计数之间相互赋值(之前的引用计数不为空);
- 声明一个基于不带参数的默认构造函数都引用计数对象时;
- 把用计数对象赋值给对象指针的时候;