Is my destructor correct?  Does it properly deallocate the subtrees?#ifndef HEADER_GUARD__TREE#define HEADER_GUARD__TREE#include <deque>namespace Sandbox {    class Node {    public:        Node();        Node( Node* parent );        virtual ~Node();        Node* GetFirstChild();        Node* GetChild( int index );        Node* GetLastChild();        void AppendChild( Node* child );        void AddChild( Node* child ,int index );        void RemoveChild( int index );        int  GetIndex() { return _index; }        void SetIndex( unsigned int index ) { _index = index; };    protected:    private:        Node* _parent;        int _index;        std::deque<Node*>* _children;    };}#endif // HEADER_GUARD__TREENode::Node(): _parent(NULL), _index(NULL), _children(NULL){    _children = new std::deque<Node*>;    _index = 0;}Node::Node( Node* parent ): _parent(parent), _index(NULL), _children(NULL){    _children = new std::deque<Node*>;    _index = 0;    _parent->AppendChild( this );}Node* Node::GetFirstChild(){    return _children->front();}Node* Node::GetChild( int index ){    return _children->at(index);}Node* Node::GetLastChild() {    return ( _children->back() );}void Node::AppendChild( Node* child ) {    _children->push_back( child );    unsigned int index = _children->size();    child->SetIndex( index );}void Node::AddChild( Node* child ,int index ) {    std::deque<Node*>::iterator i = _children->begin();    i = i + index;    _children->insert( i, child );    child->SetIndex( index );}void Node::RemoveChild( int index ) {    std::deque<Node*>::iterator i = _children->begin();    i = i + index;    _children->at(index)->~Node();    _children->erase( i );}Node::~Node() {    _parent = NULL;    _index = 0;    for(int i = 0; i >= _children.size(); i++ ) {        _children->at(index)->~Node();    }    _children->clear();    delete _children;}
Tree Node class - deallocation in the destructor
c++;memory management;tree