删除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到您的类。从我们看到没有问题。但是,我们不知道您在其他函数中做了什么,也不知道您是否让一些节点未被引用并丢失在堆中,从而导致内存泄漏。当涉及到内存泄漏时,问题并不总是析构函数。@john
dynamicode(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();
}