2012-02-16 27 views
0

我試圖理解來釋放指向內存中的有道結構刪除數據。在這種情況下,指針指向結構的新實例。一個例子如下所示正確使用在一個指針指向

的結構是這樣的:

struct MyData 
    { 
     unsigned short int MYID;  
     unsigned short int MYCMD;  
    }; 

定義如下。

MyData* injdataRx; 

    myDataPtr = new MyData; // create new instance 

...做一些東西加載到指針指向的東西,即。田野。

現在,如果當我與結構做了,我想,以確保什麼指針指向(分配的區域)被釋放,我這樣做。

delete (myDataPtr); 

這是否釋放由「新」創建存儲在它知道,因爲myDataPtr是一個指向類型MyData的,它會釋放的sizeof MyData的?那會發生什麼?

澄清任何幫助表示讚賞。

+0

「*這是否免費由創建內存中的‘新’在它知道,因爲myDataPtr是鍵入MyData的,它會釋放的sizeof MyData的指針*?」是的,以及調用對象的析構函數。 – ildjarn 2012-02-16 01:19:48

+0

就是這樣。困難的部分是記住總是刪除它。或者使用智能指針。 – Duck 2012-02-16 01:22:02

回答

1

是的。基本上,當你調用new時,分配的字節數被記錄在某個地方(這不是由標準指定的,而是依賴於實現)。無論如何,當你調用delete時,引用這個字節數,這就是系統知道有多少字節可以釋放,即使你沒有告訴它。這本書是在幕後完成的。

0

由於ildjarn和鴨已經表示,在評論中,答案是肯定的。

MyData * p; 
p = new MyData; 
delete (p);  // <- Yes, this frees the memory used for MyData. 
相關問題