あなたが言うときC#でPerson Foo = new Person();
new Person()Personメモリを割り当ててクラスのオブジェクトを作成するheap section
reference to memory allocatedPerson 型のこのオブジェクト (つまり のみ) への参照を返します。
Fooこの参照をキャッチしている間、この参照を使用して、オブジェクトのプロパティ、つまりそのmethods and variables.
C++ では、
reference to object同じ手順に従いますが、c++ ではa の apointerを typeでキャッチしますPerson。
より具体的には、オブジェクトを作成するために割り当てをnew内部的に呼び出します。operator new functionmemory dynamically
以下に示すイメージでは、 Person p( on stack) は によって返されるオブジェクトへの参照を作成しますnew Person()。
p.nameage と name は Object のメンバー変数であるため、 and を使用して簡単にアクセスできますp.age。
C# と C++ の両方でのスタックとヒープのメモリ割り当てについてさらに追加する
- 参照 Foo は常にスタック上のメモリを取得します
objectつまり、ここではnew Person()メモリをヒープに取得し、C#より具体的にはメモリを取得しますmanaged heap
アップデート
あなたが言うnew Person()と、タイプのオブジェクトに内部的にメモリを割り当てます - person.このオブジェクトはPersons members、画像に示すように構成されています。
その後、2つのことができます
タイプの変数でこの参照をキャッチするか、Person
たとえば、Person p = new Person();
ここpにオブジェクトのメモリ位置への参照があります。したがって、を使用してオブジェクトメンバーに簡単にアクセスできますp。
参照を直接保存しないでください。たとえばnew Person().age、個人の年齢が表示されます。これは匿名オブジェクトと呼ばれます。