2012-03-26 106 views
0

假設我使用指針創建表單並且該表單包含作爲另一個指針的子項,當我刪除表單時,我對主指針執行刪除操作,是否需要執行刪除操作子指針還是編譯器自己做的?C++指針處理

+1

Form?我們在談論.NET的WinForms嗎? – jalf 2012-03-26 06:36:00

+0

表格使用Motif製作。 – anirvan 2012-03-28 05:58:23

回答

4

如果你是爲指針分配內存的人,是的,你需要明確釋放你分配的所有內存。

struct A 
{ 
}; 

struct B 
{ 
    A* a; 
    B() { a = new A; } 
    ~B(); 
}; 

B* b = new B; 
delete b; 
//you will have a memory leak here, since the memory pointed to by b.a 
//is not released 

正確的方法是釋放內存在析構函數:

struct B 
{ 
    A* a; 
    B() { a = new A; } 
    ~B() { delete a; } 
}; 

你應該對智能指針讀了,他們可能會更適合你的情況。

0

是的,你通常需要明確地刪除它以避免內存泄漏。簡單的規則:如果您使用new分配它,則需要匹配delete才能將其分配。

也就是說,你通常想使用類似智能指針的東西來自動處理所有這些。

0

這個問題取決於寫入表單的析構函數的方式。例如,表單可能會嘗試調用子表單的析構函數。如果它執行這種清理,那麼你不需要進一步發佈子表單。知道你在討論什麼表單管理系統(例如MFC)會很有幫助。

+0

表格使用Motif製作。 – anirvan 2012-03-28 05:58:34