gpt4 book ai didi

c++ - 堆栈展开和指针

转载 作者:行者123 更新时间:2023-11-28 06:07:36 26 4
gpt4 key购买 nike

#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是在一个段中创建的,它的生命周期仅限于该段。即使在析构函数之后,我也无法理解如何访问数据和方法。

最佳答案

C++ 作为一种语言提供了一些保证,并且在许多领域留下了东西 undefined .这意味着,对于某些代码,标准不强制要求任何行为,因此任何事情都可以由编译器完成。你就是这种情况。

I am not able to understand how the data and methods are accessible even after destructor.

一旦对象被销毁,通过指针(或其他东西)访问它是不确定的。您能够在程序的某些实例中访问它并不重要。在某些其他情况下,您可能无法 - 更改机器、内存管理方案或任何其他环境因素可能会导致程序崩溃、挂起等。即语言在这里不能保证任何事情。

作为一般规则,您永远不应该编写调用未定义行为的代码,除非您想要学习一些东西。

关于c++ - 堆栈展开和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32069612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com