如何避免为我的不可变 Class 编写赋值运算符

How Can I Avoid Writing an Assignment Operator for my Immutable Class

我写了一个不可变的 class Coords,只有两个成员 - const int x 和 const int y。但是,编译器希望我编写一个赋值运算符,据我所知,它对于不可变类型没有任何意义。这是一个例子:

//location is a Coords* and Coords::DOWN is a static const Coords&.   
Coords& next = Coords(location);
next = next + Coords::DOWN;

Intellisense 不喜欢在第 3 行使用“=”。我认为问题是我已经为 'next' 分配了内存,所以当我想替换内存中的内容时用别的东西,它不喜欢那样。我对么?我怎样才能解决这个问题?

谢谢!

您不希望 'next' 成为 reference-to-Coords。您希望它是 Coords 类型的对象。试试这个:

Coords next = *location + Coords::DOWN

'next' 的析构函数将在 'next' 超出范围(通常在方法结束时)的 运行 时间被调用

在任何情况下,您都需要编写一个 +(加号运算符)覆盖。 (您的对象不是不可变的。您需要仔细阅读)。