3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
包含結(jié)構(gòu)字段的內(nèi)存可以在堆?;蚨焉戏峙洌唧w取決于具體情況。如果struct-type變量是某個(gè)匿名委托或迭代器類未捕獲的局部變量或參數(shù),那么它將在堆棧上分配。如果變量是某個(gè)類的一部分,那么它將在堆上的類中分配。
如果在堆上分配結(jié)構(gòu),則實(shí)際上不需要調(diào)用new運(yùn)算符來分配內(nèi)存。唯一的目的是根據(jù)構(gòu)造函數(shù)中的任何內(nèi)容設(shè)置字段值。如果未調(diào)用構(gòu)造函數(shù),則所有字段都將獲得其默認(rèn)值(0或null)。
類似地,對(duì)于在堆棧上分配的結(jié)構(gòu),除了C#要求所有局部變量在使用之前設(shè)置為某個(gè)值,因此您必須調(diào)用自定義構(gòu)造函數(shù)或默認(rèn)構(gòu)造函數(shù)(不帶參數(shù)的構(gòu)造函數(shù)始終可用于結(jié)構(gòu))。

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
簡(jiǎn)單地說,new是結(jié)構(gòu)的用詞不當(dāng),調(diào)用new只是調(diào)用構(gòu)造函數(shù)。結(jié)構(gòu)的唯一存儲(chǔ)位置是它定義的位置。
如果它是一個(gè)成員變量,它將直接存儲(chǔ)在它定義的任何內(nèi)容中,如果它是局部變量或參數(shù),則它存儲(chǔ)在堆棧中。
將其與類對(duì)比,這些類在結(jié)構(gòu)完整存儲(chǔ)的任何地方都有引用,而引用指向堆上的某處。(堆棧中的本地/參數(shù))
它可能有助于深入了解C ++,其中class / struct之間沒有真正的區(qū)別。(在語言中有類似的名稱,但它們只引用事物的默認(rèn)可訪問性)當(dāng)您調(diào)用new時(shí),您將獲得指向堆位置的指針,而如果您有非指針引用,則它將直接存儲(chǔ)在堆棧上或在另一個(gè)對(duì)象中,ala結(jié)構(gòu)在C#中。
- 3 回答
- 0 關(guān)注
- 997 瀏覽
添加回答
舉報(bào)