c++ - 从派生类方法设置基对象

标签 c++ inheritance deep-copy

我有一个类,它存储指向数据 block 的指针和数据的大小。它实现了“头”、“尾”等操作,但从问题的角度来看是无关紧要的。我使用它而不是 std::vector 我不想深度复制。 但是有时我需要复制数据,所以我有一个成员函数“duplicate”来完成它。

struct ByteArray {
    char* data;
    int size;
    ByteArray(char* data, int size) : data(data), size(size) {}
    ByteArray duplicate() const {
        char *duplicatedData = new char[size];
        memcpy(duplicatedData, data, size);
        return ByteArray(duplicatedData, size);
    }
};

现在我有一个派生类 - 扩展前一个类,我也需要一个复制方法,它调用基类的复制。我设法通过将两个对象都转换为基类来解决它,但我怀疑这不是最佳解决方案。我错过了一个更明显的解决方案吗?另外,此类是否是原始问题的正确解决方案(没有深度复制),还是存在我不知道的标准解决方案?

struct Foo : ByteArray
{
    int bar;
    ... // more members
    Foo(ByteArray &bytes, int bar) : ByteArray(bytes), bar(bar) {}
    Foo duplicate() const {
        Foo dup = *this;
        static_cast<ByteArray&>(dup) = ByteArray::duplicate();
        return dup;
    }
};

最佳答案

如果您将 Foo 构造函数改为通过 const 引用获取 ByteArrayduplicate() 将非常简单:

Foo duplicate() const {
    return Foo(ByteArray::duplicate(), bar);
}

照原样,你仍然可以用同样的方式来做,只需要多一行:

Foo duplicate() const {
    ByteArray ba = ByteArray::duplicate();
    return Foo(ba, bar);
}

关于c++ - 从派生类方法设置基对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30483239/

相关文章:

java - 在Java中,如何轻松地深度复制 Stack<MyElement> 实例?

c++ - 数的倒数,C++

python - 错误: command 'c++' failed with exit status 1

c++ - 封装二维数组与普通版本——访问速度

ruby-on-rails - Ruby on Rails对象及其属性的深层复制/深层克隆

ios - iOS中NSMutableArray如何实现深拷贝和浅拷贝?

c++ - 产生高斯噪声

c# - 我可以从 Dapper 查询返回多个派生类型的集合吗

ruby - 嵌套单例类方法查找

c++ - 从基类类型的指针数组调用派生类的方法。 (C++)