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

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

刪除空指針安全嗎?

刪除空指針安全嗎?

C++
長風秋雁 2019-07-01 16:39:22
刪除空指針安全嗎?刪除空指針安全嗎?這是一種很好的編碼風格嗎?
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

delete無論如何,都要執行檢查,所以在您的一側檢查它會增加開銷,而且看起來更丑。一個非常良好做法是將指針設置為空。delete(有助于避免雙重刪除和其他類似的內存損壞問題)。

我也希望delete默認情況下,參數設置為NULL,如

#define my_delete(x) {delete x; x = NULL;}

(我知道R和L值,但這不是很好嗎?)


查看完整回答
反對 回復 2019-07-01
?
Helenr

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

從C+0x草案標準。

$5.3.5/2-“[.]在這兩種選擇中,刪除操作數的值可能是空指針值。[.‘”

當然,沒有人會對帶空值的指針進行“刪除”,但是這樣做是安全的。理想情況下,不應該有刪除空指針的代碼。但是,在循環中刪除指針(例如在容器中)時,它有時是有用的。由于刪除空指針值是安全的,因此可以真正地編寫刪除邏輯,而無需顯式檢查要刪除的空操作數。

順便提一下,C Standard$7.20.3.2還說,空指針上的“空閑”不起作用。

自由函數使PTR所指向的空間被釋放,也就是說,可以用于進一步的分配。如果PTR是空指針,則不會發生任何操作。


查看完整回答
反對 回復 2019-07-01
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

是的很安全。

刪除空指針沒有壞處;如果將未分配的指針初始化為零,然后簡單地刪除,它通常會減少函數尾部的測試次數。


由于上一句造成了混亂,因此有一個例子-也不是例外安全-說明了所描述的內容:

void somefunc(void){
    SomeType *pst = 0;
    AnotherType *pat = 0;

    …
    pst = new SomeType;
    …
    if (…)
    {
        pat = new AnotherType[10];
        …
    }
    if (…)
    {
        …code using pat sometimes…
    }

    delete[] pat;
    delete pst;}

可以使用示例代碼選擇各種類型的nit,但概念(我希望如此)是清楚的。指針變量初始化為零,以便delete函數末尾的操作不需要測試它們在源代碼中是否為非空;庫代碼無論如何都會執行該檢查。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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