2012-04-10 79 views
7

假設我有一個帶有兩個指針的結構,每個指針指向一個實現了析構函數的對象。此外,假設頭指向Listnode結構旁邊一個非NULL值*學生和*:刪除結構的指針是否也會刪除結構中的指針?

struct Listnode {  
    Student *student; 
    Listnode *next; 
}; 
Listnode *head = new Listnode; 

如果我使用delete保留字的Listnode指針「頭」將它稱之爲內的析構函數分別構成「學生」和「下一個」指向的Student類和Listnode類。換句話說,刪除* head還會刪除* student和* next頭是唯一指向該Listnode的指針

回答

10

除非你的析構函數~Listnode在指針上調用delete。然而,調用delete將調用非指針成員的析構函數。

+0

所以你可以實現一個結構的析構函數? – 2012-04-10 00:54:54

+2

@PatMurray絕對!無論你在課堂上做什麼,你都可以在'struct'中做。實際上,唯一的區別是,在第一次訪問聲明(公共,私有或受保護)之前,類的成員被認爲是私有的,而同一個結構的成員被認爲是公有的。 – dasblinkenlight 2012-04-10 00:57:42

+0

結構體可以繼承類似的類,並且默認的繼承訪問是公共的struct和私有的類。另一個區別,但沿着同樣的路線。 – MSalters 2015-08-21 14:47:19

1

不!您應該先手動刪除它們,但也可以在析構函數方法中添加刪除代碼。