【发布时间】:2020-12-19 00:18:55
【问题描述】:
在 C++ 中,移动构造函数需要重置移动的对象,在我看来,在大多数情况下,这似乎是析构函数所做的重复。
定义一个重置方法并在析构函数和移动构造函数中使用它是最好的方法是否正确?或者也许有更好的方法?
【问题讨论】:
-
"...析构函数做了什么..." 不,因为移动到对象窃取了从对象移动的内容。您所要做的就是让移动的对象处于有效状态(特定于您的对象)并避免双重所有权等。
-
“需要重置被移动的对象” 移动构造函数或移动赋值运算符对被移动实例的唯一责任是让它都可破坏和可分配的。通常,移动构造函数和移动赋值运算符不会释放被移动实例的资源,它们(顾名思义)将它们移动到另一个实例。如果你的移动构造函数和析构函数做同样的事情,你就犯了一个严重的错误。
-
“在 C++ 中需要移动构造函数来重置移动的对象” — 不,不是。这只是常见的做法,很大程度上取决于reset 和contents 的语义。并非所有对象都拥有资源。
标签: c++ c++11 move move-semantics