У меня есть следующий код 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»)?
x
является членом A
, Это физически часть каждого A
объект, похожий на то, как ваша рука физически является частью вас. Так где бы A
объект находится в стеке, куче, или где-то еще, это где его x
член есть. Итак, чтобы ответить на этот вопрос:
Если я хочу, чтобы x был в куче, должен ли я объявить свойство x в качестве указателя (и, следовательно, инициализировать его с помощью «new»)?
Нет, это будет в куче, если A
который владеет им в куче.
ptr->x
будет в куче.
Это потому, что когда вы создаете свой экземпляр A
для всех его членов будет выделено достаточно памяти. Который включает член типа B
,