c运算符重载,我需要深度复制吗

本文关键字:深度 复制 运算符 重载 | 更新日期: 2023-09-27 17:57:31

我有一个Ascii类来帮助我管理和字符串的字符限制,我希望能够像增加字符一样增加它,所以我有一些运算符重载。给定以下代码:

 public static AsciiWord operator++(AsciiWord aWord){
        aWord.numValue++;
        return aWord.Copy();
    }

我真的需要复印件吗?

注意:Copy是我从SO中复制的一个扩展方法,它可以执行几乎所有内容的深度复制。

c运算符重载,我需要深度复制吗

增量运算符应该保持原始值不变,并返回其增量副本。但是,在您的实现中,您正在更改作为参数传入的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应该是完全不可变的。