最近、プロジェクトに取り組んでいるときにこの質問に出くわしましたが、少し混乱しました。そこで、決定的な答えを得るためにテスト プログラムを作成することにしました。
#include <iostream>
using namespace std;
class layer3{
public:
layer3(){}
~layer3(){}
private:
};
class layer2{
public:
layer2(){}
~layer2(){}
layer3* GetBAddress(){return &b;}
private:
layer3 b;
};
class layer1{
public:
layer1(){}
~layer1(){}
//returns the address of a, which is a 'layer2' object
layer2* GetaAddress(){return &a;}
//returns the address of b, which is is a layer 3 object
layer3* GetDeepBAddress(){return a.GetBAddress();}
private:
layer2 a;
};
int main(){
layer1 t;
cout << &t << " : layer 1's address" << endl;
cout << t.GetaAddress() << " : layer 2's address" <<endl;
cout << t.GetDeepTLAddress() << " : layer 3's address" <<endl;
}
このプログラムは 3 つのオブジェクトを作成します。レイヤー 2 はレイヤー 1 内に作成され、レイヤー 3 はレイヤー 2 内に作成されます。次に、layer1、layer2、および layer3 のアドレスを取得するために呼び出すと、前と同じように、次の出力が得られます。
$ ./a.exe
0x28ac4f : layer 1's address
0x28ac4f : layer 2's address
0x28ac4f : layer 3's address
これら 3 つのオブジェクトすべてがメモリ内の同じ場所を共有するにはどうすればよいでしょうか? このプログラムを 50 個のレイヤー (オブジェクト) を持つようにスケーリングするとどうなりますか? それとも10,000?これがどのように可能かはよくわかりません。誰か私を私の代わりに置いて、ここで何が起こっているのか説明してもらえますか?
編集:おそらく、オブジェクトのコンストラクターではなくプライベートでオブジェクトをインスタンス化したためでしょうか? ああ、わからない。