我不明白delete
的含義。在C++中刪除操作
例如,在下面的代碼中,delete ptr;
所以pointer variable ptr
被刪除或者the memory ptr pointed to
被刪除?
int *ptr = new int;
*ptr = 7;
delete ptr;
我不明白delete
的含義。在C++中刪除操作
例如,在下面的代碼中,delete ptr;
所以pointer variable ptr
被刪除或者the memory ptr pointed to
被刪除?
int *ptr = new int;
*ptr = 7;
delete ptr;
使指針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
。
指針變量'ptr'在調用'delete'後仍然有相同的值,它不再指向'int'。 –
@DavidSchwartz - 確實 - 增加了一些額外的信息。 –
無法保證在刪除調用之前指向的內存將不會被刪除操作符調用。某些實現(如visual C++調試運行時庫)會用可識別的模式覆蓋內存,有時有助於識別何時嘗試訪問已刪除的內存。 –
內存ptr指向刪除 – yms
所以沒有7了嗎? –
某處可能還有'7',但它所佔用的空間長遠來說會被再用一次,所以它的日子會被計算在內。 –