#include <iostream.h>class CTest
{
public:
   void Initiate();
   int add();
 private:   int count;
};
int main()
{

   CTest *pTest = new CTest;
   
   delete pTest;//释放对象刚申请的内存空间
   
   pTest->Initiate(); //还能调用,并且还能操作该类数据成员!!
   int x;
   x= pTest->add(); 
   x= pTest->add();
  
  
   cout<<"x= "<<x<<endl;     return 0;
}void CTest::Initiate()
{
     count = 0;
}int CTest::add()
{
    count = count + 1;
return count;
}输出结果是:x =2 !!!有点郁闷,各位说说是什么原因??

解决方案 »

  1.   

    函数仍然可以调用的,但是成员变量不可操作
    -----------
    非常感谢你的回答,不过你看清楚了,我上面delete pTest 后继续调用成员函数,而每个成员函数都有对成员变量的操作!!并且运行时没有报错!
      

  2.   

    new是从堆中分配空间,而delete只是把这个空间标记为可回收,在无人使用时里面的内容仍然完整,而你的指针值没变,仍然指向那里,所以会出现这种情况,但应该是偶尔的,如果有同时运行的程序,很可能会出错。
    推荐的删除步骤是:delete以后,给指针赋值NULL
      

  3.   

    我个人的理解不知道对不
    int x;
       x= pTest->add(); 
       x= pTest->add();
    有2个
      第一个x= pTest->add();// add方法里的count 为1
      第二个x= pTest->add();// add方法里count是在count=1的基础上再+1 所以是2
      

  4.   

    即使有成员变量也能通过指针直接调用的.我想的话应该是delete后,这个指针值仍然是存在的