您的位置:首页 > 运维架构

operator=返回对象和引用的区别

2012-03-30 13:45 239 查看
class CTest
{
public:
CTest()
{
printf("Constructor function is executed now!\n");
}

CTest(int nID)
{
printf("Constructor function with parameter is executed now!\n");
m_nID = nID;
}

~CTest()
{
printf("Destructor function is executed now!\n");
}

CTest(const CTest& test)
{
printf("Copy constructor function is executed now!\n");
m_nID = test.m_nID;
}

/// <summary>
/// 	1,如果是返回对象,则先调用operator=,然后调用拷贝构造函数;
///		2,如果返回引用,则只是调用operator=,效率更高
/// </summary>
CTest& operator=(const CTest& test)
{
printf("Assignment constructor function is executed now!\n");
m_nID = test.m_nID;
return *this;
}

void printID()
{
printf("m_ID = %d\n", m_nID);
}

private:
int m_nID;
};

int _tmain(int argc, _TCHAR* argv[])
{
//case1
//{
//	CTest test1(1);
//	CTest test2, test3;
//	test3 = test2 = test1;
//}

//case2
{
CTest test1(2);
CTest *pTest2 = new CTest(test1);	//只调用拷贝构造函数
delete pTest2;
}

getchar();
return 0;
}


对于case1,执行结果如下:

对于case2,执行结果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: