память кучи — расположение объекта указателя 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 A в куче будет объявлено ptr-> x в стеке или куче? Если я хочу, чтобы x был в куче, должен ли я объявить свойство x в качестве указателя (и, следовательно, инициализировать его с помощью «new»)?

2

Решение

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

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

Нет, это будет в куче, если A который владеет им в куче.

6

Другие решения

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

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

1

По вопросам рекламы [email protected]