Why can I still call a function from a pointer class after I delete it? [duplicate]

百般思念 提交于 2019-12-31 04:31:11

问题


Possible Duplicate:
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:::

result: 2

result: 2

result: 2

I am just messing around in C++ trying to learn more. I wanted to see what exactly the delete operator does. Why is it that I still get a third output of "result: 2" after deleting the object?


回答1:


The object memory probably was not overwritten by something else yet. Do not do such things, it is undefined behavior




回答2:


that's Undefined behaviour. May demons fly out of your nose.

There is another facet to that. When an object is deleted it won't be removed from memory until its overwritten by other objects that may be created after that. So even if its marked to be recycled, the data(pointed to by the pointer) could be still as it was at the time of deallocation. But there is no guarantee that it will not be used. Which is why its undefined behaviour.



来源:https://stackoverflow.com/questions/13206297/why-can-i-still-call-a-function-from-a-pointer-class-after-i-delete-it

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!