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

原创 2012年03月30日 13:45:25
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,执行结果如下:



为什么operator=操作符返回引用

2001年04月03日 18:07:00 VCKBASE Online Help Journal No.10 为什么operator=操作符返回引用 赵湘宁 问题: MSDN文...
  • softart
  • softart
  • 2007年10月27日 07:56
  • 174

operator=为什么要返回一个reference to *this

一、 函数返回值 说到operator=的返回值,那么先必须要说一下函数的返回值。函数的返回值用于初始化在调用函数处创建的临时对象。 1、 返回引用类型             Test Fun(...

Effective c++学习笔记——条款10:令operator=返回一个*this的引用

Have assignment operators return a reference to *this 从题目,我们就要记住这条信息,让你的operator=函数return *this; 基...

operator=返回*this的引用

c++的设计者bjarne stroustrup下了很大的功夫想使用户自定义类型尽可能地和固定类型的工作方式相似。这就是为什么你可以重载运算符,写类型转换函数(见条款m5),控制赋值和拷贝构造函数,等...

条款15:让operator=返回*this的引用

c++的设计者bjarne stroustrup下了很大的功夫想使用户自定义类型尽可能地和固定类型的工作方式相似。这就是为什么你可以重载运算符,写类型转换函数(见条款m5),控制赋值和拷贝构造函数,等...
  • tg5156
  • tg5156
  • 2012年07月25日 17:29
  • 549

实战c++中的vector系列--构造、operator=和assign区别

vector也许是实际过程中使用最多的stl容器,看似简单,其实有很多技巧和陷阱。着重看一看vector的构造,暂时按照C++11:default (1) explicit vector (cons...

c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别

operator 关键字来重载内置运算符,或提供类或结构声明中的用户定义转换。它可以定义不同类型之间采用何种转化方式和转化的结果。 operator用于定义类型转化时可采用2种方式,隐式转换(imp...

拷贝构造函数与赋值构造函数(operator=)的区别

拷贝构造函数与赋值构造函数(operator=)的区别 对于拷贝构造函数以及赋值构造函数的定义,我就不再啰嗦了,还是给出一个简单的例子,更直观些吧。 class CStr { ...

c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别

msdn参考:http://msdn.microsoft.com/zh-cn/library/s53ehcz3.aspx               http://msdn.microsoft....

c++构造函数总结----C++拷贝构造函数及重写operator =的区别

c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:operator=返回对象和引用的区别
举报原因:
原因补充:

(最多只允许输入30个字)