【发布时间】:2018-04-16 23:06:01
【问题描述】:
我有一个这样的结构:
struct OBJ {
int x;
const int y;
OBJ& operator=(OBJ &&oth)
{
y = oth.y; // this is disallowed
return *this;
}
}
还有一个示例代码
void func() {
static OBJ obj;
OBJ other; // random values
if(conditon)
obj = std::move(other); //move
}
我理解这是因为 obj 是 Non const 带有 const 成员 y 的 OBJ。我不能只改变 y 但我应该能够改变整个对象(调用析构函数和构造函数)。这是可能的还是唯一正确的解决方案是在y 之前删除我的const,并记住不要意外更改?
我需要在func 调用之间存储我的static obj,但如果条件为真,我想移动其他对象来代替这个静态对象。
【问题讨论】:
-
[Off Topic]
obj = std::move(OBJ());不需要。OBJ()已经是一个右值,所以obj = OBJ();做同样的事情。 -
您将需要编写自己的移动赋值运算符(当您使用它时,其他特殊的成员函数)
-
@NathanOliver 这个代码只是真实的例子
func这个对象已经存在,我想移动它而不是构造! -
也许你也应该read a good beginners book,因为你有一个构造函数,它们不应该返回任何东西。