【发布时间】:2022-01-03 15:25:11
【问题描述】:
我应该为由静态节点组成的树实现一类节点(出于教育目的)。类标题如下所示:
class CNodeStatic
{
private:
int i_val;
CNodeStatic *pc_parent_node;
vector<CNodeStatic> v_children;
public:
CNodeStatic() {i_val =0; pc_parent_node = NULL;};
~CNodeStatic();
void vSetValue(int iNewVal) {i_val = iNewVal;};
int iGetChildrenNumber() {return (v_children.size());};
void vAddNewChild();
void vAddChild(CNodeStatic pcChildNode);
CNodeStatic *pcGetChild (int iChildOffset);
};
class CTreeStatic
{
private:
CNodeStatic c_root;
public:
CTreeStatic();
~CTreeStatic();
CNodeStatic *pcGetRoot() {return (&c_root);};
bool bMoveSubtree(CNodeStatic *pcParentNode, CNodeStatic *pcNewChildNode);
void vPrintTree();
};
但是我不确定此类的析构函数应该是什么样子。我知道当类中有动态分配的内存或指针时,我们需要定义析构函数。在本例中,pc_parent_node 指向节点的父节点。但是,如果我尝试将我的析构函数仅定义为 delete pc_parent_node,则程序将无法运行。
【问题讨论】:
-
代码sn-p中没有显示动态分配,所以不清楚你要删除什么
-
应该是这样的:
-
在使用
delete之前检查指针是否真的指向分配的内存 -
@Ivan 你不能那样做。
-
这样做的一个主要问题是添加一个孩子会使现有孙辈的父指针无效。
标签: c++ nodes destructor