-2

我对这个概念很陌生,我很困惑,如果悬空指针是一个指向内存位置的指针,该内存位置指向已释放或删除的内存,那么在这种情况下为什么它仍然能够调用该函数test()

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

class MyClass{

    public:
    void test(){

        cout<< "just checking"<<endl;

        }

    };

int main(int argc, char **argv)
{
    MyClass *p ( new MyClass());; 
    MyClass  *q = p;
    delete p;
    q->test();

    p = NULL;
    q->test();
    return 0;
}

任何帮助,将不胜感激。

4

1 回答 1

4

Delete 运行类的析构函数,并将内存标记为已释放。如果析构函数没有做任何破坏性太大的事情,并且如果内存还没有被重新分配用于其他目的,那么这个对象就会变成一个基本上是僵尸的东西:它看起来有点像活人,但实际上正在准备吃掉你的大脑。

不要让你的大脑被吃掉。

于 2016-03-08T20:37:24.253 回答