我正在使用节点树,我想复制一个节点及其所有子节点,但是由于多态性而不能。
class Node
{
Node(const Node& other)
{
// not sure what to do
}
~Node() virtual
{
for (auto child: children)
delete child;
}
vector<Node*> children;
}
class Node1
{
// node1
}
class Node2
{
// node2
}
节点中的子节点是节点1和节点2的混合体。
我尝试使用无法工作的新Node异常,因为那样的话,它就没有足够的空间容纳多态节点。我可以想到的唯一方法是使用malloc,但这似乎有些粗糙。
答案 0 :(得分:0)
我会像这样创建一个抽象基类
class i_node
{
public:
virtual i_node() = 0;
virtual ~i_node(){}
}
并使Node,Node1和Node2都继承自i_node,其子级向量包含指向i_nodes的指针而不是派生类。
vector<i_node*> children;