在类内调用自身拷贝构造函数是个陷阱,一般情况下不会达到初始化自身的目的。
如:
class CTest
{
public:
CTest(void);
~CTest(void);
CTest(const CTest& srcTest);//拷贝构造函数
void Initilization(CTest* pTest); //测试函数
}
其中:
void CTest::Initilization(CTest*pTest)
{
CTest::CTest(*pTest);
}
然后:
CTest testA,tesB;
tesB.Initilization(testA);//对testA进行初始化
如上,利用tesB.Initilization(testA);来将testA的内容复制到tesB。
但这样并不会达到预期结果,tesB不会改变。
这是因为:
void CTest::Initilization(CTest*pTest)
{
CTest::CTest(*pTest);
}
该函数中CTest::CTest(*pTest);的作用实际上并不是tesB调用了本类的构造函数来初始化当前对象,而是创建了一个CTest的临时对象。当函数体结束后,该临时对象会被释放。因此tesB的各个参数还是不会被改变。
所以,在类的成员函数中,最好不要调用类自身的构造函数及拷贝构造函数。