0

有人请解释一下。到目前为止,我知道,删除后我无法访问分配的内存。如果我错了,请纠正我。

#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

4

3 回答 3

2

你是未定义行为的受害者。当他们说这是未定义的行为时,这意味着任何事情都可能发生,并且包括代码可能appear正常工作。
当您释放动态分配的内存时,内存不会被擦除。这意味着您当前的进程不拥有它,但内容会保留在那里,直到它们被重新用于其他用途。

但是访问未分配的内存是致命的。

而且,当您通过delete a 它释放内存时,它会释放内存帮助a,但a仍在范围内,并且在 main 结束之前有它的生命周期。
因此,您可以执行函数调用。删除内存不会破坏变量本身,但变量持有的内存会被清除。非动态变量在其生命周期结束时被编译器销毁。

于 2013-09-08T17:25:50.967 回答
1

这是一个未定义的行为,任何事情都可能发生。如果内存块还没有被其他东西填充,它可能不会像你看到的那样崩溃,但是请不要访问已释放的内存!

并且不要使用原始指针,我们为此目的创建智能指针。

于 2013-09-08T17:25:37.547 回答
0

行为未定义。在我的实现中可能发生任何事情,程序显示垃圾值。实际上标准没有定义任何东西,实现可以自由选择任何东西

于 2013-09-08T17:26:34.760 回答