可能重複:
Is there any reason to check for a NULL pointer before deleting?刪除空指針
我經常看到以下代碼:
if(pointer)
delete pointer;
我的理解它是安全的刪除空指針,那麼這個檢查的重點是什麼?
可能重複:
Is there any reason to check for a NULL pointer before deleting?刪除空指針
我經常看到以下代碼:
if(pointer)
delete pointer;
我的理解它是安全的刪除空指針,那麼這個檢查的重點是什麼?
delete
將檢查指針爲NULL你,所以你是正確的,則不需要檢查。
你也可以看到,有些人設置的指針爲NULL 後它刪除,這樣你就不會做任何愚蠢的事喜歡嘗試使用內存不再是你或刪除指針兩次阻止你,這會導致錯誤。
您的意見「讓你不要做任何愚蠢的事喜歡嘗試使用內存不再是你的」,甚至取消對NULL指針是UB。當指針再次被刪除時(這是你已經提到的雙刪除) –
儘管現在是安全的,它並非總是如此:-)很可能習慣。還有其他的後果要刪除。 1)如果你使用的是專門的內存管理器,並覆蓋new和delete操作,那麼你很可能必須做檢查Operator Delete更多細節
'[需要的引證]'。這是添加一個非常簡單的事情,IIRC C已保證'free'手柄'NULL'正確,因爲永遠(至少C89,我也不會感到驚訝,如果它是在ANSI C太)。所以我覺得很難相信曾經有一個可用的C++實現不能處理'delete NULL;'。 – delnan
的檢查是沒有必要的。
The documentation規定,刪除將「取消分配ptr指向的內存塊(如果不是空)」
大多數人都這樣做,因爲他們通常有錯誤處理,否則(不,我真的不看檢查點)。在某些情況下,他們會檢查它們是否在釋放某些東西,而不是意外更改某處的指針,並通過不釋放內存而導致內存泄漏。 free(NULL);
應該可以在所有情況下工作,並且不會出錯,除非涉及錯誤處理,否則您可以刪除if語句並只是免費。
.....是否安全? – slartibartfast
重要的一點是,一旦刪除,將其設置爲NULL。 – vrrathod
據我的理解,你的理解是正確的,但並非所有人都分享它。但讓我們看看語言水平如何說。 – delnan