高手来看看,是刚才有人发的贴,该如何处理

高手来看看,是刚才有人发的贴
#include   <iostream>
using   namespace   std;

class   B
{
public:
B()
{
cout < < "default   constructor " < <endl;
}
~B()
{
cout < < "destructed " < <endl;
}
B(int   i):data(i)
{
cout < < "constructed   by   parameter "   < <   data   < <endl;
}
B&   operator=(B&   b)     //问题1
{

*this=b;   //问题2
//data=b.data;
cout < < "==========赋值 " < <endl;
        return   *this;
}
B(const   B   &b)
{
cout < < "Copy   construct! " < <endl;
}
private:

int   data;
};
B   Play(   B   b)
{

return   b   ;
}

int   main(int   argc,   char*   argv[])
{
B   temp   =   Play(5);

cout < < "---------------------- " < <endl;

B   abc(4);
abc=Play(5);

int   a=5;
B   ccc(a);
B   aaa(a);
//system( "PAUSE ");
return   0;
}
问题1:B&   operator=(B&   b)   这样写   在Dev   C++下abc=Play(5);根本通不过;VC没事   照样运行。

问题2:*this=b;这样写按道理应该是个无限递归才对啊。但VC运行良好。
不过这时有个跟头痛的问题。析构和构造函数被调用的次数根本不等,
abc=Play(5)下面的语句也不会执行似的   .

高手来解释一下什么原因?

------解决方案--------------------
是无限的递归函数,导致异常。
------解决方案--------------------
*this=b;
造成的无限递归在VC6调试状态可提示你Stack Over