删除C+中的树结构+; 我应该写C++中的树的实现,我在树中为节点写析构函数而挣扎。我不确定它是否以适当的方式清除了整个结构。你能帮我吗?(我必须使用C++98,也许它可以解释在向量中存储原始指针)
头文件:删除C+中的树结构+; 我应该写C++中的树的实现,我在树中为节点写析构函数而挣扎。我不确定它是否以适当的方式清除了整个结构。你能帮我吗?(我必须使用C++98,也许它可以解释在向量中存储原始指针),c++,c++98,C++,C++98,头文件: class dynamicNode { public: dynamicNode(); ~dynamicNode(); void setValue(int newValue); int getChildrenNumber(); void addChild(); dynamicNode* getChild(int index); void printValue(); void printAllBelow(); private
class dynamicNode {
public:
dynamicNode();
~dynamicNode();
void setValue(int newValue);
int getChildrenNumber();
void addChild();
dynamicNode* getChild(int index);
void printValue();
void printAllBelow();
private:
dynamicNode* parent;
std::vector<dynamicNode*> children;
int value;
};
类动态节点{
公众:
动态节点();
~dynamicNode();
无效设置值(int newValue);
int getChildrenNumber();
void addChild();
dynamicNode*getChild(int索引);
void printValue();
void printallower();
私人:
动态节点*父节点;
性病媒儿童;
int值;
};
实现(我只包括与树结构相关的方法):
dynamicNode::dynamicNode(){
数值=0;
parent=NULL;
}
dynamicNode::~dynamicNode(){
如果(!children.empty()){
对于(int i=0;iparent=this;
儿童。推回(新儿童);
}
析构函数可以简化,它应该使用正确的索引类型:
dynamicNode::~dynamicNode() {
for(size_t i = 0; i < children.size(); ++i)
delete children[i];
}
析构函数代码在我看来很好。(你可以去掉
if(!children.empty())
测试和children.clear()
行,如果你愿意的话,因为它们不是必需的,但它们也不会伤害任何东西)在我看来没问题,只是对象无法复制。因此,您需要定义复制构造函数和赋值运算符。或者(更有可能)只是删除它们,这样你就不会意外地复制了。只需添加dynamicode(constdynamicode&)=delete代码>和dynamicode&operator=(常量dynamicode&)=delete代码>到您的类。从我们看到没有问题。但是,我们不知道您在其他函数中做了什么,也不知道您是否让一些节点未被引用并丢失在堆中,从而导致内存泄漏。当涉及到内存泄漏时,问题并不总是析构函数。@johndynamicode(const dynamicode&)=delete您的实际问题是什么?
dynamicNode::~dynamicNode() {
for(size_t i = 0; i < children.size(); ++i)
delete children[i];
}
void dynamicNode::addChild() {
std::auto_ptr<dynamicNode> newChild(new dynamicNode()); // Delete if children.push_back throws.
newChild->parent = this;
children.push_back(newChild.get());
newChild.release();
}