关闭

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

431人阅读 评论(0) 收藏 举报
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,执行结果如下:



0
0

猜你在找
【直播】计算机视觉原理及实战——屈教授
【套餐】深度学习入门视频课程——唐宇迪
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】机器学习之凸优化——马博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:64401次
    • 积分:765
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:26篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论