在未将 'new' 分配给指针的情况下创建的对象的生命周期

Lifetime of object created without 'new' assigned to pointer

假设我们有:

struct A
{
    int data;
};

int main( void )
{
  {
    A a;
    a.data = 4;
  }

  cout << "Hello World" << endl;
  return 0;
}

我知道在没有 new 的情况下创建的对象存储在堆栈中,并在退出定义它的范围时自动销毁。所以当它执行第 13 行时,对象 a 不应该存在。

第二种情况:

struct A
{
    int data;
};

int main( void )
{
 A * b;
  {
    A a;
    a.data = 4;
    b = &a;
  }

  cout << b->data << endl;
  return 0;
}

问题是如果我把作用域内a的地址赋值给一个指针,对象什么时候销毁?因为我可以在范围之外打印该对象的数据值,这意味着该对象必须仍然存在。

不,这意味着您遇到了未定义的行为,因此您可以推断出的任何结论都是无关紧要的。

b 中存储的地址在关闭作用域后将不会指向任何有效数据。