簡體   English   中英

刪除C ++中的懸空指針

[英]Delete dangling pointer in C++

在此代碼之后_var2是懸空Dangling pointer

int* _var = new int(102);
auto _var2 = _var;
delete _var;

我必須刪除_var2( delete _var2 )嗎? 這是不可避免的嗎?

否,因為它已被刪除。

delete關鍵字實際上並沒有刪除指針 ,而是刪除了它所指向的值 在這種情況下,你分配整數102上線1堆,然后刪除在第3行無論你的指針(即整數_var_var2 )仍持有其中整數地址,但它不存在了。 delete _var2是不正確的,因為在該地址沒有分配任何內容。

我建議您使用“ std :: tr1 :: shared_ptr”中的資源進行管理。
第三章中的Scott Meyers撰寫的“有效的c ++”中有關於它的有用信息。

UPD。 通常情況下,您不需要這樣做,因為它的點已被刪除。 如果需要使用指針,則最好在刪除指針后將其設置為NULL:

int* _var = new int(102);
auto _var2 = _var;
...
if(!!_var)
{
delete _var;
_var = NULL;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM