2016-02-29 63 views
0

下面的代碼是從一本書碼提取物的濃縮版,當時的想法是創建PTR變量的副本,然後有PTR變量指向一個不同的地址,最後刪除臨時指針。刪除指針指向同一個變量

如果我的理解是正確的,是否調用刪除臨時指針實際上刪除了原來的num變量?並且既然臨時指針和num都是懸掛指針,將它們都設置爲NULL是否正確?

int *num = new int(5); 
int num1 = 10; 

int *ptr = num; 
int *temp = ptr; 

ptr = &num1; 

delete temp; 
temp = NULL; 
num = NULL; 
+0

您的代碼是正確的。 'delete'刪除指向的對象(它不是基於指針的引用計數釋放,或類似的東西) –

回答

2

是的:你分配的一件東西被刪除。我不知道你的意思是正確的給變量賦NULL,但是在它們的值之前不要指向分配的內存,它當然不是不好的的想法。

1

如果我的理解是正確的,確實調用delete對臨時指針實際上刪除了原來的num變量?並且由於臨時指針和num都是懸掛指針,將它們都設置爲NULL是否正確?

是的,因爲ptr & num點完全相同的分配的內存地址和delete運營商只需要該地址,它並不關心哪個變量保存地址。

而且,因爲兩個暫時指針和num被懸擺指針是正確的設置他們兩個爲NULL

不需要將它們設置爲NULL(如果您使用的是C++ 11,則使用nullptr)。但是如果最終錯誤地使用這些懸掛指針,使用調試器,如果指針設置爲nullptr,則更容易發現問題。