C++拷贝构造函数和赋值构造函数中的有关问题
C++拷贝构造函数和赋值构造函数中的问题
关于C++的拷贝构造函数和赋值构造函数,有如下代码:
在拷贝构造函数和赋值构造函数中不能直接使用代码中的*this = test这样的方式进行值的拷贝,因为这样会引起循环调用operator=,从而导致堆栈溢出。应该将参数中的test中的数据拷贝过来:
另外代码4处的方式并不会引起赋值构造函数的调用,而5处的代码则会调用赋值构造函数。
关于C++的拷贝构造函数和赋值构造函数,有如下代码:
#include "stdafx.h" class CTest { public: CTest(){}; CTest(const CTest &test); CTest& operator=(const CTest &test); public: int a; }; CTest::CTest(const CTest &test) { // 1 this->a = test.a; // 2 *this = test; } CTest& CTest::operator=(const CTest &test) { if (&test == this) return *this; // 3 *this = test; return *this; } int _tmain(int argc, _TCHAR* argv[]) { CTest test1; test1.a = 10; CTest *pTest = new CTest(test1); delete pTest; // 4 CTest test2 = test1; // 5 CTest test3; test3 = test1; return 0; }
在拷贝构造函数和赋值构造函数中不能直接使用代码中的*this = test这样的方式进行值的拷贝,因为这样会引起循环调用operator=,从而导致堆栈溢出。应该将参数中的test中的数据拷贝过来:
this->a = test.a; return *this;
另外代码4处的方式并不会引起赋值构造函数的调用,而5处的代码则会调用赋值构造函数。