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

时间:2016-01-12 18:07:53

标签: c++ operator-overloading immutability operator-keyword assignment-operator

我编写了一个不可变类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行中。我认为问题在于我已经为“下一步”分配了内存,所以当我想用其他内容替换内存中的内容时,它不喜欢这样。我对么?我怎样才能解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

你不希望'next'成为Coords的引用。你希望它是Coords类型的对象。试试这个:

Coords next = *location + Coords::DOWN

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

您将需要在任何事件中编写+(加运算符)覆盖。 (你的对象不是一成不变的。你需要阅读它。)