2015-06-08 2 views
2

Я следующий C++ код:C++ указатель Расположение объекта

struct B { 
    int c; 
    int d; 
} 

struct A { 
    int a; 
    B x; 
} 

int main() { 
    A * ptr = new A; 
    ptr->a = 1; 
    ptr->x.c = 2; 
    ptr->x.d = 23; 

    // a lot of lines of codes later ... 

    // Will the following values be guranteed? 
    cout << ptr->x.c << endl; 
    cout << ptr->x.d << endl; 
} 

После объявления нового «STRUCT А» в куче будет ptr-> х будет объявлена ​​в стеке или в куче? Если я хочу, чтобы x находился в куче, я должен объявить свойство x в качестве указателя (и, следовательно, инициализировать его «новым»)?

ответ

6

x является членом A. Это физически часть каждого объекта A, аналогично тому, как ваша рука физически является частью вас. Поэтому везде, где находится объект A, в стеке находится куча или где-то еще, где находится его член x. Поэтому, чтобы ответить на этот вопрос:

Если я хочу, чтобы x находился на куче, я должен объявить свойство x в качестве указателя (и, следовательно, инициализировать его «новым»)?

Нет. Это будет на куче, если у него есть A, который находится в куче.

1

ptr->x будет на куче.

Это связано с тем, что при создании вашего экземпляра A у него будет достаточно памяти для всех его членов. В который входит член типа B.

Смежные вопросы