我有一個圖形對象,我想爲此創建一個析構函數。然而,我並沒有真正舒適的遞歸,而且我有點迷失在我自己的數據結構中。我將展示涉及的類和我的析構函數的開始。析構函數,圖形和遞歸性
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()條件將不會被滿足,對 ?
如何以及何時銷燬* Graph?
我會冒堆棧溢出嗎?
- 我可以在我開始刪除的根節點中調用
vector.erase()
,以便遞歸銷燬所有內容而不是執行for-loop?
- 我可以在我開始刪除的根節點中調用
是小孩矢量或矢量?你有'矢量',但你打電話給刪除,所以我很困惑。 –
NathanOliver
這是我的一個錯誤,它應該是矢量,我將不得不更改構造函數^^' –
Csi