C++拷贝构造函数和赋值构造函数中的问题_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++拷贝构造函数和赋值构造函数中的问题

C++拷贝构造函数和赋值构造函数中的问题

 2012/4/5 13:26:30  narwhal  程序员俱乐部  我要评论(0)
  • 摘要:关于C++的拷贝构造函数和赋值构造函数,有如下代码:#include"stdafx.h"classCTest{public:CTest(){};CTest(constCTest&test);CTest&operator=(constCTest&test);public:inta;};CTest::CTest(constCTest&test){//1this->a=test.a;//2*this=test;}CTest&CTest:
  • 标签:构造函数 函数 构造 c++ 问题
关于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处的代码则会调用赋值构造函数。
发表评论
用户名: 匿名