【发布时间】:2010-07-01 22:29:09
【问题描述】:
在 C++ 中,我发现将“Clone()”方法添加到属于需要(尤其是多态)复制的层次结构的类中非常有用,其签名如下:
class Foo {
public:
virtual Foo* Clone() const;
};
这可能看起来很漂亮,但很容易出现类维护引入的错误。每当有人向此类添加数据成员时,他们必须记住更新 Clone() 方法。失败通常会导致细微的错误。单元测试不会发现错误,除非它们被更新或类具有相等比较方法并且既是单元测试又是更新以比较新成员。维护者不会得到编译器错误。 Clone() 方法看起来很通用,很容易被忽略。
是否有其他人因此而对 Clone() 有问题?我倾向于在类的头文件中添加注释,提醒维护者在添加数据成员时更新 Clone。那里有更好的主意吗?插入#if/etc 会很愚蠢/迂腐吗?指令来查找类大小的变化并报告警告/错误?
【问题讨论】:
标签: c++ clone maintenance