私の基本的なプログラム構造は次のとおりです。
class B1
{
vector <someStruct> aStruct; //some struct contains a vector of 'someotherStruct's, etc
B1() { cout << &aStruct << " ";};
};
class B2 {B1* pB1;};
class A
{
B1 object_B1;
B2 object_B2;
A() { objectB2.pB1 = &object_B1;};
};
int main()
{
vector <A> someA;
for(int q=0; q < N; q++)
someA.push_back(A());
cout << endl;
for (int q=0; q < N; q++)
cout << someA[q].B2.pB1 << " ";
}
したがって、Nが5の場合、出力は次のようになります。0xbffff828 0xbffff828 0xbffff828 0xbffff828 0xbffff828 \ n
0xbffff828 0xbffff828 0xbffff828 0xbffff828 0xbffff828
つまり、各オブジェクトのベクトルはメモリ内の同じスペースを占有します。また、プログラム出力もこれを裏付けています。異なるオブジェクトを介してベクター内のデータにアクセスすると、異なるはずの場合でも同じ値が得られるためです。もちろん、もう1つの奇妙なことは、ベクトルのアドレスがオブジェクトのアドレスと同じになることです。