我最近在做一个项目时遇到了这个问题,这让我有点困惑。所以我决定写一个测试程序来得到一个确定的答案:
#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 个对象。layer2 在 layer1 内部创建,layer3 在 layer2 内部创建。然后我调用来获取 layer1、layer2 和 layer3 的地址,就像之前发生的那样,这是输出:
$ ./a.exe
0x28ac4f : layer 1's address
0x28ac4f : layer 2's address
0x28ac4f : layer 3's address
这三个对象如何共享内存中的同一个位置?如果我将这个程序扩展为 50 层(对象)会怎样?还是一万?我不太确定这怎么可能。有人可以让我代替我解释这里发生了什么吗?
编辑:也许是因为我在私有而不是在对象的构造函数中实例化了对象?呸,我不知道。