У меня есть объект графа, и я хотел бы создать деструктор для этого. Тем не менее, я не очень комфортно с рекурсивностью, и я немного потерял свои собственные структуры данных. Я покажу участвующие классы и мое начало деструктора.Деструктор, граф и рекурсия
class Graph {
private :
Graph* parent;
vector<Graph> child;
Board tab;
bool seen;
public :
Graph(const Board&);
Graph(const Board&, Graph*);
~Graph();
...
};
class Board {
private :
int** tab;
int nbline;
int nbcolumn;
Position emptyspot;
public :
Board();
Board(int, int, Play&);
Board(int, int);
Board(const Board&);
Board(int, int, ifstream&);
~Board();
...
};
Класс позиции получил только 2 int (строка и столбцы). Совета деструкторов работы:
Board::~Board()
{
for(int i = 0; i < this->nbline; i++) {
delete tab[i];
}
delete tab;
}
Как вы уже догадались, я хотел бы, чтобы уничтожить узел моего графа, и все последующие узлы.
Вот мой beggining:
Graph::~Graph() {
while(!child.empty()) {
for(vector<Graph>::iterator itr = child.begin; itr != child.end; ++itr) {
delete child[itr];
}
}
}
Таким образом, я иду в все мои ветви, рекурсивно, правильно? Когда я нахожу лист (вектор равен нулю) - если уничтожить все, что произойдет в векторе родителя?
Я не знаю, будет ли родитель установлен в NULL (я так не думаю), а пространство памяти родительского вектора не будет нераспределенным, поэтому условие child.empty() не будет выполнено, правильно ?
Как и когда я разрушаю диаграмму *?
Я могу рискнуть переполнением стека?
- Могу ли я назвать
vector.erase()
в корневом узле, где я начинаю удалять, чтобы уничтожить все рекурсивно вместо того, чтобы делать для цикла?
- Могу ли я назвать
является дочерним элементом или вектором ? У вас есть 'vector ', но вы вызываете delete, поэтому я запутался. –
NathanOliver
Это моя ошибка, это должен быть вектор, мне тоже придется менять конструкторы ^^ ' –
Csi