调用删除对象后访问成员函数

时间:2013-09-08 17:21:26

标签: c++ delete-operator

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

#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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

不使用原始指针,我们为此创建智能指针。

答案 2 :(得分:0)

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