[英]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.