C++指针对象位置

fyq*_*h95 2 c++ heap-memory stack-memory

我有以下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;
}
Run Code Online (Sandbox Code Playgroud)

在堆上声明一个新的"struct A"后,ptr-> x会在堆栈还是堆上声明?如果我希望x在堆上,我必须将属性x声明为指针(因此,用"new"初始化它)?

Ben*_*ley 6

x是...的成员A.它实际上是每个A物体的一部分,类似于你手臂在身体上的一部分.因此,无论A对象在何处,在堆栈上,堆中,还是在其他任何地方,也就是其x成员所在的位置.所以回答这个问题:

如果我希望x在堆上,我必须将属性x声明为指针(因此,用"new"初始化它)?

不会.如果A它拥有它,它将在堆上.