#include <iostream>
using namespace std;
class BaseClass
{
public:
BaseClass(int i)
{
data = i;
cout << "_____BaseClass()____" << endl;
}
~BaseClass()
{
data = -99;
cout << "_____~BaseClass()____" << endl;
}
void Fun()
{
cout << "_____Fun()____" << data << endl;
}
int data;
};
int main()
{
BaseClass *b = NULL;
{
BaseClass b1(300);
b = &b1;
}
b->Fun();
return 0;
}
实例b1是在细分中创建的,其生命仅限于该细分。即使在析构函数之后,我也无法理解数据和方法是如何被访问的。
答案 0 :(得分:1)
C ++作为一种语言提供了一些保证,并且在许多领域留下了undefined。这意味着,对于某些代码,标准不强制要求任何行为,因此,编译器可以完成任何操作。你处于这种状况。
即使在析构函数之后,我也无法理解数据和方法是如何被访问的。
一旦对象被销毁,通过指针(或其他东西)访问它是不确定的。您可以在某个程序实例中访问它并不重要。在某些其他情况下,您可能无法 - 更改机器,内存管理方案或任何其他环境因素可能会导致程序崩溃,挂起等,即语言不保证此处有任何内容。
作为一般规则,除非您尝试学习某些内容,否则不应编写调用未定义行为的代码。