c运算符重载,我需要深度复制吗
本文关键字:深度 复制 运算符 重载 | 更新日期: 2023-09-27 17:57:31
我有一个Ascii类来帮助我管理和字符串的字符限制,我希望能够像增加字符一样增加它,所以我有一些运算符重载。给定以下代码:
public static AsciiWord operator++(AsciiWord aWord){
aWord.numValue++;
return aWord.Copy();
}
我真的需要复印件吗?
注意:Copy是我从SO中复制的一个扩展方法,它可以执行几乎所有内容的深度复制。
增量运算符应该保持原始值不变,并返回其增量副本。但是,在您的实现中,您正在更改作为参数传入的aWord
。
例如,以下代码使用修复后增量运算符,并期望oldValue.NumValue
为0,但对于当前的实现,它将为1。
AsciiWord aWord = new AsciiWord { NumValue = 0 };
AsciiWord oldValue = aWord++;
Assert.Equal(0, oldValue.NumValue); // fails
int i = 0;
int oldIntValue = i++;
Assert.Equal(0, oldIntValue); //passes
换句话说,AsciiWord
应该是完全不可变的。