Gestion de la mémoire pour une classe Noeud
Bonjour,
mon code pour libérer la mémoire dans le destructeur de la classe Node ne fonctionne pas et génère une erreur à l'exécution lors de la supression du Node ayant une valeur 66. Ce Node n'ayant pas de Children, je m'attend à ce que le test if(*it!=nullptr) m'évitera de supprimer le contenu de Children pour le Node 66. Mais le programme essaie quand meme de supprimer Children du Node 66. Merci de votre aide :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <iterator>
using namespace std;
/* ******************************************************* Node ********************************************************* */
template<class T>
class Node
{
private:
T _value;
vector<Node<T>*> children;
public:
Node(T value);
Node(const Node<T>& node);
void AddChild(Node<T>* node);
T getValue() const;
vector<Node<T>*> returnChildren() const;
void replaceChildrenByNewOnes(vector<Node<T>*> newChildren);
~Node();
};
template<class T>
void Node<T>::replaceChildrenByNewOnes(vector<Node<T>*> newChildren)
{
children = newChildren;
}
template <class T>
Node<T>::Node(T value) :_value(value)
{
children.push_back(NULL);
}
template <class T>
Node<T>::Node(const Node& node) :_value(node.getValue()),
children(node.returnChildren())
{
}
template <class T>
void Node<T>::AddChild(Node* node)
{
if (children[0] == NULL) { children.pop_back(); };
children.push_back(node);
}
template <class T>
T Node<T>::getValue() const
{
return _value;
}
template <class T>
vector<Node<T>*> Node<T>::returnChildren() const
{
return children;
}
template <class T>
Node<T>::~Node()
{
for (typename vector<Node<T>*>::iterator it = children.begin(); it != children.end(); it++)
{
if (*it != nullptr) {
delete *it;
cout << "Children with value " << (*it)->getValue() << " is deleted" << endl;
}
}
}
int main()
{
Node<int> node(5);
Node<int> node2(4);
Node<int> node3(66);
node.AddChild(&node2);
node2.AddChild(&node3);
Node<int>* ptr = &node;
cout << ptr->getValue() << endl;
system("PAUSE");
return 0;
} |