我有一个类,它存储指向数据 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 引用获取 ByteArray
,duplicate()
将非常简单:
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/