我正在实现用于c ++数据聚合的星形算法(我是c ++的新手)。在这个算法中我们有大数据。在第一步中,我们使用所有数据构建基础树,然后基于基础树我们应该构建其他树,命名为星树,在每个星树完成后,输出其值,并且应该销毁星树。我做了所有这个过程,我的算法工作,但它的内存使用非常多,似乎这些星树没有被破坏。以下是我认为对此问题有用的代码的一部分:
对于我打算销毁的每棵树,我将它的根传递给destroyTree(node * root)方法:
void Cagg::destroyTree(node* root){
int size = root->child.size();
for (int i = 0; i < size; i++){
destroyTree(root->child[i]);
}
delete root;
root = NULL;
}
调试时,似乎节点被删除,但程序的内存使用量呈指数增长,而程序正在创建更多的星树,这意味着它们不会被销毁。而且,析构函数是空的。我只是删除了这个方法中的节点。 提前谢谢你帮助我。
此外,我从另一个类继承节点结构。有可能是问题吗?并且两个类析构函数都是空的。
答案 0 :(得分:1)
这里什么都不会泄漏内存,但是你不需要显式的递归。所有你需要的是:
node::~node()
{
while (size() > 0) {
delete child[size()-1];
}
}
和某处delete root;
。