含List类型字段且设为null的结构体实例化是否会分配堆内存?
问题
给定如下C#结构体:
struct ExampleStruct { public int ID; public List<ExampleStruct> children; }
执行以下代码行时,是否会在堆上创建对象?
ExampleStruct exStrct = new ExampleStruct() {ID = 5, children = null};
回答
不会在堆上创建对象,原因如下:
ExampleStruct是值类型(结构体),在局部作用域中用new实例化值类型时,内存会分配在栈上,而非堆上。- 代码里
children被赋值为null,并没有实际创建List<ExampleStruct>实例——只有当你为这个引用类型成员创建具体对象时,才会触发堆内存分配,当前代码不存在这个操作。
内容的提问来源于stack exchange,提问作者Amos Egel
相关产品推荐
相关产品推荐

