系统集成论坛

标题: 为什么被删除的对象还能调用成员函数 ! [打印本页]

作者: 一直都在    时间: 2013-7-3 13:52
标题: 为什么被删除的对象还能调用成员函数 !
class A
{
public:
//A(){cout<<"执行了构造函数"<<endl;}
~A(){cout<<"执行了析构函数"<<endl;}
void Get(){cout<<"调用了Get函数"<<endl;}
private:
};
void main()
{
A b; //创建一个对象
b.~A(); //把他析构了....
b.Get(); //为什么还能调用函数
A *c=new A; //创建一个对象指针
delete c; //删除指针C
c->Get(); //为什么还能调用函数
c=new A; //创建了一个新的内存空间
delete c;
delete c; //问题又来了...vs2008为什么删除了两次内存空间居然不报错...
c->Get();  //又是正常调用,头大了
}



还是感谢之前版主的热心帮助.这次又有新的问题了....
我不解的是析构了对象,在我的理解就是删除了对象,那为什么还能用已经删除的对象访问成员函数,而创建一个对象指针(是否该这么叫呢?) 为什么用delete删除后,按理说连他的内存空间也删除掉了,就算是内存地址还存在,但是里面的值也不应该是原来的值了....为什么也是还能调用函数.
最后就是VS2008使用了两次删除指针空间的delete运算符,居然没提示内存错误...是编译器升级自动做了处理,还是说错误不可预测了.... vc++6里面一个空间删除两次直接会报错.

希望回答简单些....请别把一些高深的理论知识搬上来,真心看不懂....
如果我哪里有误解,麻烦指出来,谢谢!
提前谢谢回答的朋友




欢迎光临 系统集成论坛 (http://bbs.xtjc.com/) Powered by Discuz! X3.1