3

我不明白delete的含義。在C++中刪除操作

例如,在下面的代碼中,delete ptr;所以pointer variable ptr被刪除或者the memory ptr pointed to被刪除?

int *ptr = new int; 
*ptr = 7; 
delete ptr; 
+2

內存ptr指向刪除 – yms

+0

所以沒有7了嗎? –

+2

某處可能還有'7',但它所佔用的空間長遠來說會被再用一次,所以它的日子會被計算在內。 –

回答

11

使指針PTR變量被刪除或存儲ptr指向的是 刪除?

內存指出ptr刪除(即標記爲空閒 - 內容可能仍然存在,但正如@JonTrauntvein還提到,這取決於implemetation內存可以與被覆蓋一定的模式 - 刪除後永遠不會被訪問)。

指針本身沒有變化,仍含有相同的值(即它指向的內存地址),但它是一個好習慣刪除後的指針,即ptr = NULL;

該內存被分配在堆上,其中new int應始終與delete一起釋放。


int *ptr = new int; 

- >內存在堆上分配 - 量:sizeof(int) - ptr指向存儲器位置。

*ptr = 7; 

- >值7被置於該分配的存儲器中。

delete ptr; 

- >所分配的(含7)存儲器是刪除(即標記爲空閒其他用途)。 prt仍指向釋放的內存位置。訪問它是無效的,所以指針應該設置爲NULL

+2

指針變量'ptr'在調用'delete'後仍然有相同的值,它不再指向'int'。 –

+0

@DavidSchwartz - 確實 - 增加了一些額外的信息。 –

+2

無法保證在刪除調用之前指向的內存將不會被刪除操作符調用。某些實現(如visual C++調試運行時庫)會用可識別的模式覆蓋內存,有時有助於識別何時嘗試訪問已刪除的內存。 –