假設我有類似以下的類:遞歸析構函數在C++
#include <vector>
class element
{
public:
element();
~element();
virtual void my_func();
private:
std::vector<element*> _elements;
};
我怎麼會去執行析構函數?
我在想這樣的事情,但我不確定。我很擔心內存泄漏,因爲我對C++比較陌生。
void element::destroy()
{
for(int i = 0; i < _elements.size(); ++i)
_elements.at(i)->destroy();
if(this != NULL)
delete this;
}
element::~element()
{
destroy();
}
謝謝。
PS: 這裏是一個示例主:
int main()
{
element* el_1 = new element();
element* el_2 = new element();
element* el_3 = new element();
el_1.add_element(el_2);
el_2.add_element(el_3);
return 0;
}
而且,如果我這樣做(又名不要使用new
):
int main()
{
element el_1;
element el_2;
element el_3;
el_1.add_element(&el_2);
el_2.add_element(&el_3);
return 0;
}
你可以調用'delete _elements.at(i)',你不應該在析構函數中測試'this'不是null。它不能爲空。 – 2012-01-05 21:04:08
會調用'delete _elements.at(i)'正確處理所有的子元素嗎?換句話說,他們是否會按照正確的順序處理(從下到上)?因爲我認爲如果我刪除一個'_elements'中仍然有東西的元素,那將是一個泄漏。 – Eric 2012-01-05 21:06:47
當你「刪除某些東西」時,調用'something'類的析構函數,然後指針被釋放。 – 2012-01-05 21:08:20