運算子new 將記憶體初始化為零
儘管人們普遍誤解new 運算子不會用零初始化內存,但它確實可以初始化內存,但它確實可以初始化內存實現這一點特定條件下的任務。
在C 中,new 運算子執行零的情況主要有兩種初始化:
括號初始化:
當new 後面跟著括號和一個空的初始化列表時,例如wsk = new unsigned int() ;,它明確地呼叫該類型的預設建構函式。對於像 unsigned int 這樣的基本類型,預設建構函式會將記憶體初始化為零。
帶括號的陣列初始化:
與先前的場景類似,在陣列聲明中使用括號和空的初始化列表,例如wsa = new unsigned int[5]();,初始化每個陣列元素為零。
在提供的範例程式碼中,以下幾行展示了零初始化:
wsk2 = new unsigned int(5);
這將 wsk2 初始化為值 5。
wsk2 = new unsigned int;
這會將 wsk2 初始化為零,因為它使用括號語法而沒有初始化列表。此行為適用於標量和陣列。
在範例的第二部分中,輸出確認了零初始化:
wsk2: 0x928e008 5 wsk2: 0x928e008 0
第一行顯示 wsk2 指向位址 0x928e008並且包含值 5。刪除 wsk2 並使用 new unsigned int; 建立另一個後,第二行顯示它現在指向相同的位址(0x928e008) 但包含零。
以上是C 中的 new 運算子總是將記憶體初始化為零嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!