以前寫拷貝構造函數的時候,覺得參數爲引用,不爲值傳遞,僅僅是爲了減小一次內存拷貝。然而今天看到一篇文章發現本身對拷貝構造的參數理解有誤。 參數爲引用,不爲值傳遞是爲了防止拷貝構造函數的無限遞歸,最終致使棧溢出。函數
class test
{
public:
test()
{
cout << "constructor with argument\n";
}
~test()
{
}
test(test& t)
{
cout << "copy constructor\n";
}
test&operator=(const test&e)
{
cout << "assignment operator\n";
return *this;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
test ort;
test a(ort);
test b = ort ;
a = b;
return 0;
}
test(test t);
test ort;
test a(ort); --> test.a(test t=ort)==test.a(test t(ort))
-->test.a(test t(test t = ort))
==test.a(test t(test t(ort)))
-->test.a(test t(test t(test t=ort)))
就這樣會一直無限遞歸下去。
class test
{
public:
test()
{
cout << "constructor with argument\n";
}
~test()
{
}
test(test& t)
{
cout << "copy constructor\n";
}
test&operator=(test e)
{
cout << "assignment operator\n";
return *this;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
test ort;
test a(ort);
test b = ort ;
a = b;
return 0;
}