清除操作的定义
-void clear()
·将树中的所有结点清除(释放堆中的结点)
清除操作功能的定义
-free(node)
·清除node为根结点的树
·释放树中的每一个结点
树中的结点可能来源于不用存储空间,如何判断堆空间的结点并释放?
-单凭内存地址很难准确判断具体的存储区域
-只有堆空间内存需要主动释放(delete)
-清楚操作时只需要对堆中的结点进行释放
工厂模式
-在GTreeNode中增加保护成员变量m_flag
-将GTreeNode中的Operator new重载为保护成员函数
-提供工厂方法GTreeNode<T>* NewNode()
-在工厂方法中new新结点并将m_flag设置为true
树结点的工厂模式示例
GTreeNode<int>* hn = GTreeNode<int>::NewNode();
GTreeNode<int> sn;
if( hn->flag()) //true
{
delete hn;
}
hn = &sn;
if( hn->flag() ) //false
{
delete hn;
}
总结:
-清楚操作用于销毁树中的每个结点
-销毁结点时需要决定是否释放对应的内存空间
-工厂模式可用于“定制”堆空间中的结点
-只有销毁定制结点的时候需要进行释放