亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除指針后將其空設為空是很好的做法嗎?

刪除指針后將其空設為空是很好的做法嗎?

C++ C
慕少森 2019-07-11 16:23:53
刪除指針后將其空設為空是很好的做法嗎?我先說,使用智能指針,您就不必擔心這個問題了。下面的代碼有什么問題?Foo * p = new Foo;// (use p)delete p;p = NULL;這是由回答和評論另一個問題。一條評論來自尼爾·巴特沃斯引起了一些不滿:在C+中,在DELETE之后將指針設置為NULL并不是普遍的良好做法。有時它是一件好事,有時它是沒有意義的,可以隱藏錯誤。在很多情況下,這都無濟于事。但以我的經驗來看,不會有什么傷害的。有人啟發我。
查看完整描述

3 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

將指針設置為0(在標準C+中為“NULL”,C中的NULL定義有點不同),避免了雙刪除的崩潰。

考慮以下幾點:

Foo* foo = 0; // Sets the pointer to 0 (C++ NULL)
delete foo; // Won't do anything

鑒于:

Foo* foo = new Foo();
delete foo; // Deletes the object
delete foo; // Undefined behavior

換句話說,如果不將已刪除的指針設置為0,則如果執行雙刪除操作,則會遇到麻煩。反對在刪除后將指針設置為0的一個論點是,這樣做只是掩蓋了雙重刪除錯誤,并使它們得不到處理。

很明顯,最好不要有雙重刪除錯誤,但取決于所有權語義和對象生命周期,這在實踐中是很難實現的。與UB相比,我更喜歡蒙面雙刪除錯誤。

最后,在管理對象分配方面,我建議您看看std::unique_ptr對于嚴格的/單一的所有權,std::shared_ptr對于共享所有權或其他智能指針實現,則取決于您的需要。


查看完整回答
反對 回復 2019-07-11
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

我有一個更好的最佳實踐:盡可能結束變量的作用域!

{
    Foo* pFoo = new Foo;
    // use pFoo
    delete pFoo;}


查看完整回答
反對 回復 2019-07-11
  • 3 回答
  • 0 關注
  • 546 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號