gpt4 book ai didi

c++ - 确保在 C++ 中正确维护 Clone()

转载 作者:行者123 更新时间:2023-11-30 01:31:22 25 4
gpt4 key购买 nike

在 C++ 中,我发现将“Clone()”方法添加到需要(尤其是多态)复制的层次结构的类中非常有用,其签名如下:

class Foo {
public:
virtual Foo* Clone() const;
};

这可能看起来很漂亮,但很容易出现类维护引入的错误。每当有人向此类添加数据成员时,他们都必须记住更新 Clone() 方法。失败通常会导致细微的错误。单元测试不会发现错误,除非它们被更新或类具有相等比较方法,并且该方法既经过单元测试又被更新以比较新成员。维护者不会得到编译器错误。 Clone() 方法看起来很普通,很容易被忽视。

有没有其他人因为这个原因对 Clone() 有疑问?我倾向于在类的头文件中添加注释,提醒维护者在添加数据成员时更新 Clone。那里有更好的主意吗?插入#if/etc 是否愚蠢/迂腐?寻找类(class)规模变化并报告警告/错误的指令?

最佳答案

为什么不直接使用拷贝构造函数呢?

virtual Foo* Clone() const { return new Foo(*this); }

编辑:哦等等,Foo 是 BASE 类,而不是 DERIVED 类吗?同理。

virtual Foo* Clone() const { return new MyFavouriteDerived(*this); }

只需确保所有派生类都以这种方式实现克隆,就不会有问题。私有(private)复制构造函数没有问题,因为该方法是一个成员,因此可以访问它。

关于c++ - 确保在 C++ 中正确维护 Clone(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3162149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com