【发布时间】:2015-05-27 12:59:31
【问题描述】:
我有一个类,它存储指向数据块的指针和数据的大小。它实现了诸如“头”、“尾”之类的操作……但从问题的角度来看,它是无关紧要的。我在不想深度复制的地方使用它而不是 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;
}
};
【问题讨论】:
-
对不起,我明白了。由于多次编辑,基本方法的调用仍保持这种形式。我知道调用基方法的语法(在链接的答案中描述),但我更关心对转换为基类的对象的分配。 (我现在将编辑问题)
标签: c++ inheritance deep-copy