我一直想知道為什么刪除后將指針自動設置為NULL 并不是標準的一部分。如果得到解決,那么由于無效指針而導致的許多崩潰將不會發生。但話雖如此,我仍然可以想到該標準將限制此限制的幾個原因:性能:附加說明可能會降低delete性能??赡苁且驗閏onst指針。然后我想標準再次可以為這種特殊情況做些什么。有誰知道不允許這樣做的確切原因?
3 回答

人到中年有點甜
TA貢獻1895條經驗 獲得超7個贊
Stroustrup自己回答。摘錄:
C ++明確允許delete的實現將左值操作數清零,我曾希望實現能夠做到這一點,但是這種想法似乎在實現者中并不流行。
但是他提出的主要問題是delete的參數不必是左值。

冉冉說
TA貢獻1877條經驗 獲得超1個贊
首先,設置為null將需要內存存儲的變量。的確,您通常在變量中有一個指針,但有時您可能想刪除一個剛計算出的地址處的對象。使用“無效”刪除將是不可能的。
然后是性能。您可能以這樣的方式編寫了代碼:刪除完成后,指針將立即超出范圍。用null填充只是浪費時間。C ++是一種具有“不需要它?然后您不必為此付出代價”的思想的語言。
如果您需要安全保護,則可以使用各種各樣的智能指針,也可以編寫自己的更好,更智能的指針。

繁花不似錦
TA貢獻1851條經驗 獲得超4個贊
您可以有多個指向該內存的指針。如果您為刪除指定的指針設置為null,但所有其他指針都不設置為null,則會產生錯誤的安全感。指針不過是一個地址,一個數字。也可能是帶有取消引用操作的int。我的觀點是,您還必須掃描每個指針,以找到那些引用了剛刪除的同一內存的指針,并將它們也清空了。掃描所有指向該地址的指針并將其清空的計算量很大,因為該語言不是為此設計的。(盡管其他一些語言也構造了它們的引用,以不同的方式實現相似的目標。)
- 3 回答
- 0 關注
- 1032 瀏覽
添加回答
舉報
0/150
提交
取消