我正在努力学习移动语义,以便将它介绍给我的学生.我一直在使用高度简化的矢量或类似字符串的类来管理内存,其成员输出消息来演示它们的活动.我正在尝试开发一组简单的例子来向学生展示.
RVO和其他地方的gcc 4.7和clang的施工设备积极地消除了复制和移动施工,所以虽然我可以很容易地看到工作中的移动分配,但我唯一一次看到移动施工在工作中是因为我关闭了gcc 4.7中的建筑省略与-fno-elide-constructors.
显式复制构造语句
MyString newString(oldString);
Run Code Online (Sandbox Code Playgroud)
即使启用了elision,也会调用复制构造函数.但有点像
MyString newString(oldString1 + oldString2);
Run Code Online (Sandbox Code Playgroud)
由于省略,因此不会调用移动构造函数.
任何明确使用std :: move的东西都不会成为一个简单的例子,因为解释std :: move必须在以后出现.
所以我的问题是:是否有一个简单的代码示例,即使复制/移动构造函数被删除,也会调用移动构造?