C++move的作用和原理
1)move 是C++11引入的一个新特性,用来实现移动语义。它的主要作用是将对象的资源从一个对象转移到另一个对象,而无需进行深拷贝,减少了资源内存的分配,可提高性能。
2)std::move的作用只有一个,无论输入参数是左值还是右值,都强制转成右值。
3 move 转成右值有什么好处?
这就涉及到移动语义的概念,右值可以触发移动语义,那什么是移动语义?我们可以理解为在对象转换的时候,通过右值可以触发到类的移动构造函数或者移动赋值函数。
因为触发了移动构造函数或者 移动赋值函数,我们就默认,原对象后面已经不会再使用了(包括内部的某些内存),这样我们就可以在新对象中直接使用原对象的那部分内存,减少了数据的拷贝操作,昂贵的拷贝转为了廉价的移动,提升了程序的性能。
4)是不是std:move后的对象就没法使用了?
其实不是,还是取决于搭配的移动构造函数和移动赋值函数是如何实现的。
如果在移动构造函数+移动赋值函数中,还是使用了拷贝动作,那原对象还是可以使用的,见下面示例。
如果我们在移动构造函数+移动赋值函数中,将原对象内部内存废弃掉,新对象使用原对象内存,那原对象的内存就不可以用了,示例代码如下:
总结:
std::move 函数的作用是将参数强制转换为右值。而且,只是转换为右值,并不会对对象进行任何操作。
转换为右值可以触发移动语义,减少数据的拷贝操作,提升程序的性能。
在使用 std:move 函数后,原对象是否可以继续使用取决于移动构造函数和移动赋值函数的实现。