【发布时间】:2018-08-22 00:10:04
【问题描述】:
虽然有很多帖子在复制构造函数中管理指针,但我没有找到合适的答案来正确实现以下内容。
A 类的对象“a”存储一个元素“tab”数组,这些元素是指向 B1 或 B2 类型元素的指针,它们都派生自 B 类。
我想通过调用复制构造函数来保存“a”的副本(以便稍后恢复)。 我的问题是在这个复制构造函数中分配内存,复制 'tab[i]' 元素的内容。
必须有一种规范的方式来做到这一点(我想没有调用
这是我为说明问题而构建的 MWE:
#include <iostream>
using namespace std;
//-----------------------
class B {
public:
virtual void display()=0;
};
//-----------------------
class B1 : public B {
public:
B1() : val(1) // ctor
{}
void display() {
cout << val << endl;
}
private:
int val;
};
//-----------------------
class B2 : public B {
public:
B2() : val(2) // ctor
{}
void display() {
cout << val << endl;
}
private:
int val;
};
//---------- A -------------
class A {
public:
A () { // ctor
tab = new B * [2];
tab[0] = new B1;
tab[1] = new B2;
}
A (A const &orig) // copy ctor
: tab(orig.tab)
{
// ... HOW should i make a copy of the tab[i] elements ?...
// ... as i do not know if tab[i] is type B1 or B2 ...
}
void display() {
tab[0]->display();
tab[1]->display();
}
private:
B ** tab;
};
//------M A I N ---------
int main() {
A a;
a.display();
return 0;
}
【问题讨论】:
-
你需要查找深拷贝构造函数和浅拷贝构造函数之间的区别。 stackoverflow.com/questions/2657810/deep-copy-vs-shallow-copy
标签: c++