在结构上使用“new”在堆或堆栈上分配它吗?使用new运算符创建类的实例时,将在堆上分配内存。当您使用new运算符创建结构的实例时,在堆上还是堆栈上分配内存?
3 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
包含结构字段的内存可以在堆栈或堆上分配,具体取决于具体情况。如果struct-type变量是某个匿名委托或迭代器类未捕获的局部变量或参数,那么它将在堆栈上分配。如果变量是某个类的一部分,那么它将在堆上的类中分配。
如果在堆上分配结构,则实际上不需要调用new运算符来分配内存。唯一的目的是根据构造函数中的任何内容设置字段值。如果未调用构造函数,则所有字段都将获得其默认值(0或null)。
类似地,对于在堆栈上分配的结构,除了C#要求所有局部变量在使用之前设置为某个值,因此您必须调用自定义构造函数或默认构造函数(不带参数的构造函数始终可用于结构)。
茅侃侃
TA贡献1842条经验 获得超21个赞
简单地说,new是结构的用词不当,调用new只是调用构造函数。结构的唯一存储位置是它定义的位置。
如果它是一个成员变量,它将直接存储在它定义的任何内容中,如果它是局部变量或参数,则它存储在堆栈中。
将其与类对比,这些类在结构完整存储的任何地方都有引用,而引用指向堆上的某处。(堆栈中的本地/参数)
它可能有助于深入了解C ++,其中class / struct之间没有真正的区别。(在语言中有类似的名称,但它们只引用事物的默认可访问性)当您调用new时,您将获得指向堆位置的指针,而如果您有非指针引用,则它将直接存储在堆栈上或在另一个对象中,ala结构在C#中。
- 3 回答
- 0 关注
- 957 浏览
添加回答
举报
0/150
提交
取消