删除后,为什么还可以从指针类调用函数?

时间:2012-11-03 05:31:23

标签: c++ pointers function-pointers

  

可能重复:
  What will happen when I call a member function on a NULL object pointer?

#include <iostream>
#include <string>

using namespace std;

class myClass{
private:
        int *x, *y, *z;

public:
        myClass();
    ~myClass();
    void display();
    void math(int,int,int);
};


void myClass::math(int x,int y,int z){
    this->x = new int;
    this->y = new int;
    this->z = new int;

    *this->x = x;
    *this->y = y;
    *this->z = z;

    cout << "result: " << (x*y)+z << endl;
}

myClass::~myClass(){
    delete x;
    delete y;
    delete z;
}

void myClass::display(){
    cout << x << y << z << endl;
}

myClass::myClass(){
    x=0;
    y=0;
    z=0;
}


int main()
{
    myClass myclass;
    myClass *myptr;
    myptr = new myClass();

        myclass.math(1,1,1);

myptr->math(1,1,1);

delete myptr;

myptr->math(1,1,1);  **//why does this still print?**



int t;
cin >> t;

 }
  

::: OUTPUT :::

     

结果:2

     

结果:2

     

结果:2

我只是在用C ++搞乱,试图了解更多信息。我想看看删除操作符到底是什么。为什么在删除对象后我仍然得到“结果:2”的第三个输出?

2 个答案:

答案 0 :(得分:4)

对象内存可能还没有被其他东西覆盖。不做这样的事情,这是未定义的行为

答案 1 :(得分:3)

这是未定义的行为。愿恶魔飞出你的鼻子。

还有另外一个方面。当一个对象为delete d时,它将不被从内存中删除,直到被其后可能创建的其他对象覆盖。因此,即使它被标记为可回收,数据(由指针指向)仍然可以像解除分配时一样。但无法保证 不会被使用。这就是为什么它的未定义行为。