可能重复:
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”的第三个输出?
答案 0 :(得分:4)
对象内存可能还没有被其他东西覆盖。不做这样的事情,这是未定义的行为
答案 1 :(得分:3)
这是未定义的行为。愿恶魔飞出你的鼻子。
还有另外一个方面。当一个对象为delete
d时,它将不被从内存中删除,直到被其后可能创建的其他对象覆盖。因此,即使它被标记为可回收,数据(由指针指向)仍然可以像解除分配时一样。但无法保证 不会被使用。这就是为什么它的未定义行为。