【发布时间】:2017-02-09 12:57:31
【问题描述】:
我正在 MSDN 上阅读这篇关于 new 运算符的文章:
https://msdn.microsoft.com/en-us/library/fa0ab757(v=vs.120).aspx
这一段我没看懂:
结构体等值类型对象是在栈上创建的,而类等引用类型对象是在堆上创建的。这两种类型的对象都会自动销毁,但基于值类型的对象在超出范围时会被销毁,而基于引用类型的对象会在最后一次对其的引用被删除后的未指定时间销毁 .
粗体字到底是什么意思?什么是“基于值/引用类型的对象”?那是一个仅包含值成员/仅引用成员的对象吗?
编辑我不认为“堆/堆栈是什么”是适当的重复。虽然在该链接线程中选择的答案信息量很大,但我大致了解两者之间的差异——就像“堆栈存储值类型,堆存储引用类型”一样。但我的印象是,“值类型”应该是 int 或 char;我没有意识到 struct 包含在其中,或者 struct 可以定义为“基于值类型的对象”。
【问题讨论】:
-
它们分别表示
struct和class。 -
@Igor 我不同意你的重复投票。这与碰巧存储在不同位置的 .NET 类型有关。该页面上没有任何内容可以回答他的问题。
-
@JonathonReinhart 这似乎比我预期的要简单得多,但现在我意识到我对
structs 知之甚少,所以我想我现在要阅读那篇文章。 .. 我认为这足以作为我接受的答案,因为它确实回答了我的问题。 -
@sab669 - 我不会太努力地阅读那篇文章。它专注于错误的事情。 (堆栈/堆/生命周期)。我会推荐 Eric Lippert 的 The Truth about Value Types
标签: .net