高手来看看,是刚才有人发的贴
#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