析构对象后为何还能输出该对象的成员变量的值?解决思路

析构对象后为何还能输出该对象的成员变量的值?
#include   <iostream>
using   namespace   std;
class   A  
{
public:
A(int   i){cout < < "执行构造函数创建一个对象\n ";x=i;}
~A(){cout < < "执行析构函数!\n ";}
int   get()   {return   x;}
void   set(int   i){x=i;}
private:
int   x;
};
  A   func(   );
int   main()
{

      A   *r=&func();  
      cout < < "对象a的副本的地址: " < <&r < <endl;
      cout < <r-> get() < <endl;
      return   0;
}
  A     func(   )
{
cout < < "跳转到func函数中!\n ";
A   a(23);
cout < < "对象a的地址: " < <&a < <endl;
return   a;
}

输出:
跳转到func函数中!
执行构造函数创建一个对象
对象a的地址:0013FF0C
执行复制构造函数创建一个对象
执行析构函数!  
执行析构函数!
对象a的副本的地址:0013FF78
23
这个问题大了,为何析构两次后还能输出对象a的成员变量x的值??


------解决方案--------------------
不要认为析构函数调用后,就真的吃掉了你的内存,析构函数只不过告诉你这部分内存现在不再是某一个变量独占的了,你有权访问它,但其它人也有权修改它,在别人没修改之前,你当然能得到原来的值了。

你这个问题,关键在于析构函数啥事都没做,你把类改成这样试试:
class A
{
A(int i):a(new int){*a=i;}
A(A& m):a(new int){*a=m.get();}
~A(){delete a;a=0;}
int get(){return *a;}
void set(int i){*a=i;}
private:
int* a;
}