3 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
operator new
不保證將內(nèi)存初始化為任何內(nèi)容,并且在沒有new-initializer的情況下分配a 的new-expression會(huì)使對(duì)象具有不確定的值。unsigned int
讀取未初始化對(duì)象的值會(huì)導(dǎo)致未定義的行為。未定義的行為包括評(píng)估零值而沒有不良影響但可能導(dǎo)致任何事情發(fā)生,因此您應(yīng)該避免導(dǎo)致它。
在C ++ 11中,使用的語(yǔ)言是分配的對(duì)象是默認(rèn)初始化的,對(duì)于非類類型意味著不執(zhí)行初始化。這與C ++ 03 中default-initialized的含義不同。

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)于一些編譯器,new的調(diào)試版本將初始化數(shù)據(jù),但肯定沒有什么可以依賴。
存儲(chǔ)器也可能從之前的使用中獲得0。不要假設(shè)刪除和新內(nèi)存之間沒有任何內(nèi)容發(fā)生。在背景中可能會(huì)有一些你從未注意到的事情。此外,相同的指針值可能不是相同的物理內(nèi)存。內(nèi)存頁(yè)面被移動(dòng)并被分頁(yè)輸入。指針可能被映射到一個(gè)完全不同的位置。
底線:如果您沒有專門初始化內(nèi)存位置,那么您可以不假設(shè)其內(nèi)容。在使用內(nèi)存之前,內(nèi)存管理器甚至可能不會(huì)分配特定的物理內(nèi)存位置。
現(xiàn)代內(nèi)存管理非常復(fù)雜,但作為一名C ++程序員,你并不在乎(主要是?)。遵守規(guī)則,你不會(huì)遇到麻煩。
?如果您正在優(yōu)化以減少頁(yè)面錯(cuò)誤,您可能會(huì)在意。
- 3 回答
- 0 關(guān)注
- 953 瀏覽
添加回答
舉報(bào)