string类是C++标准库中一个很重要的类,使用非常方便。但是它存在一个问

题:无论是否需要,拷贝构造函数和赋值运算符都会生成文字列的拷贝。

 

C++11中引入了右值引用和移动的概念,使得程序员可以在构造,赋值的的时候可以选择拷贝还是移动对象,从而大幅度提高程序运行的效率。

 

示例

 

代码分别使用string的拷贝构造函数,赋值运算符的拷贝版本和移动版本进行比较。

 

C++11新特性(49)- 用移动类对象代替拷贝类对象_二维码

 

两种方式的区别就在于移动版本使用了std::move(22行,25行)

 

执行结果

 

qt5.0环境中,移动版本需要的时间大概是拷贝版本的40%。

 

作者观点

 

能用移动版本就不要用拷贝版本。

 

关注微信公众号【面向对象思考】