在C++98中,C++编译器可以通过成员级拷贝自动生成复制构造函数和复制赋值操作符。
struct X {
std::string s;
std::vector<int> v;
int n;
};编译器使用成员级复制自动生成X的复制构造函数和复制赋值操作符.
但是在C++11中,移动语义是如何改变的呢?
是否自动生成构造函数和move 赋值运算符,如复制构造函数和复制赋值运算符?
是否存在不自动生成移动操作的情况?
发布于 2014-07-01 14:32:33
Nikos Athanasiou给出了一个很好的答案,但我想添加这个工具,我认为它非常有用。
这是霍华德·辛南特2014年ACCU会议的演讲“你想知道的所有关于移动语义的知识(然后是一些)”的截图,我认为它非常好地提醒了自动生成特殊成员的规则:

辛南特先生对评论所作的澄清:
幻灯片没有这么说,但红色方块表示不推荐的行为。也就是说,如果您不想依赖于不推荐的行为,那么如果您声明析构函数,则声明两个副本成员,或者声明一个副本成员(基本上遵循C++98/03“3的规则”)
我建议阅读幻灯片,以获得这个表的渐进结构,并详细解释我们现在是如何和为什么要这样做的。
其他演示文稿可以在那里找到:http://accu.org/index.php/articles/1901
https://stackoverflow.com/questions/24342941
复制相似问题