首頁 > 後端開發 > C++ > C 中的 new 是否將記憶體初始化為零?

C 中的 new 是否將記憶體初始化為零?

Linda Hamilton
發布: 2024-12-11 06:53:09
原創
623 人瀏覽過

Does `new` in C   Initialize Memory to Zero?

運算子 new 將記憶體初始化為零

在 C 中,new 運算子通常用於動態記憶體分配。它分配指定大小的記憶體區塊並傳回指向已分配記憶體的指標。然而,有一個常見的誤解,即 new 不會用零初始化分配的記憶體。本文闡明了 new 如何初始化內存,解決了明顯的差異。

預設和零初始化

使用new 建立基本類型的物件時(例如int , unsigned int),有兩種變體:

  • wsk = new unsigned整數; - 預設初始化:不進行初始化,記憶體保持未初始化狀態。
  • wsk = new unsigned int(); - 零初始化:記憶體設定為零。

同樣適用於陣列:

  • wsa = new unsigned int[5]; - 預設初始化
  • wsa = new unsigned int[5](>
  • wsa = new unsigned int[5]( ); -零初始化

零初始化說明

雖然new 通常會初始化具有不確定值的基元,但在使用帶有空括號語法的零帶有空括號時會出現異常(new類型();)。這會將記憶體初始化為零。 C 11 標準支援此行為:
[C++11: 5.3.4/15]: A new-expression that creates an object of type T initializes that object as follows: [...] If the new-initializer is interpreted according to the initialization rules of 8.5 for direct-initialization.
登入後複製

新放置

新放置允許在特定位置分配記憶體。利用這種零初始化技術,很明顯記憶體確實被設定為零:
//... (memory allocation and initialization code)
wsa[0] = 1;  // Modify the memory location
wsa[1] = 2;  // Modify the memory location
// ... (more modifications)
//...
登入後複製

如果記憶體包含原始值(1, 2, ...),那麼零初始化將有失敗的。然而,輸出確認分配的記憶體已設定為零。

因此,雖然 new 通常不會用零初始化原始內存,但使用零初始化 (new type();) 將內存初始化為零。這對於直接記憶體分配和放置 new 都適用。

以上是C 中的 new 是否將記憶體初始化為零?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板