あなたが言うときC#でPerson Foo = new Person();
new Person()
Person
メモリを割り当ててクラスのオブジェクトを作成するheap section
reference to memory allocated
Person 型のこのオブジェクト (つまり のみ) への参照を返します。
Foo
この参照をキャッチしている間、この参照を使用して、オブジェクトのプロパティ、つまりそのmethods and variables
.
C++ では、
reference to object
同じ手順に従いますが、c++ ではa の apointer
を typeでキャッチしますPerson
。
より具体的には、オブジェクトを作成するために割り当てをnew
内部的に呼び出します。operator new function
memory dynamically
以下に示すイメージでは、 Person p
( on stack
) は によって返されるオブジェクトへの参照を作成しますnew Person()
。
p.name
age と 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
、個人の年齢が表示されます。これは匿名オブジェクトと呼ばれます。