在 C# 中,当你说Person Foo = new Person();
new Person()Person通过分配内存来创建类的对象heap section
- 返回对
reference to memory allocatedPerson 类型的这个对象的引用(即除了 之外什么都没有)。
虽然Foo捕获此引用并使用此引用,您可以访问对象属性,即它的methods and variables.
在 C++ 中,
它遵循相同的步骤,但在 c++ 中,您可以捕获 a类型reference to object的 a 。pointerPerson
更具体地说,new内部调用operator new function分配 amemory dynamically以创建对象。
在下面显示的图像中,Person p( on stack) 创建了对由 . 返回的对象的引用new Person()。
age 和 name 是 Object 的成员变量。因此我们可以使用p.name和轻松访问它们p.age。
更多关于 c# 和 c++ 中的堆栈和堆内存分配的内容
- 引用 Foo 总是在堆栈上获得内存
object即这里new Person()在堆上获得内存,C#更具体地说,它在哪里获得内存managed heap
更新
当你说它new Person()在内部为类型的对象分配内存时 - person。这个对象由Persons members如图所示。
然后你可以做两件事
您可以在类型变量中捕获此引用,Person
例如Person p = new Person();
这p是对对象内存位置的引用。因此我可以使用p.
只是不要存储引用直接使用它,例如new Person().age会给我人员年龄。这称为匿名对象。