有人请解释一下。到目前为止,我知道,删除后我无法访问已分配的内存。如果我错了,请纠正我。
#include <iostream>
using namespace std;
class A
{
int x;
public:
A()
{
x = 3;
cout<< "Creating A" <<endl;
}
~A()
{
cout<< "Destroying A" <<endl;
}
int getX()
{
return x;
}
};
int main(int argc, const char * argv[])
{
A* a = new A();
delete a;
cout<< a->getX()<<endl;
return 0;
}
输出显示如下!
Creating A
Destroying A
3
我不明白如何在删除getX()
a
答案 0 :(得分:2)
你是未定义行为的受害者。当他们说这是未定义的行为时,它意味着任何事情都可能发生,并且包括代码可能appear
正常工作
释放动态分配的内存时,内存不会被擦除。这意味着您当前的进程不拥有它,但内容将保留在那里,直到它们被重用为其他内容。
但访问未分配的内存是致命的。
而且,当你通过delete a
释放内存时,它会释放a
的内存帮助,但是a
仍然在范围内并且有其生命周期直到主要结束。
因此,您可以执行函数调用。删除内存不会破坏变量本身,但会清除变量保存的内存。编译器在生命周期结束时会销毁非动态变量。
答案 1 :(得分:1)
这是一种未定义的行为,任何事情都可能发生。如果内存块还没有填充其他东西,它可能不会像你看到的那样崩溃,但请不要访问释放的内存!
不使用原始指针,我们为此创建智能指针。
答案 2 :(得分:0)
行为未定义。在我的实现中可能发生任何事情,程序显示垃圾值。实际上标准没有定义任何东西,实现可以自由选择任何东西