在未将 '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
中存储的地址在关闭作用域后将不会指向任何有效数据。
假设我们有:
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
中存储的地址在关闭作用域后将不会指向任何有效数据。