【第22期】观点:IT 行业加班,到底有没有价值?

C++赋值函数一些考虑

原创 2016年08月29日 22:58:45
// Primary programmer use this way
CMyString & CMyString::operator=(const CMyString & str) 
{
	if(this == &str)
		return *this;
	delete [] m_pData;
	m_pData = NULL;
	/*
	* Here may be failed. If this step failed, and next step will
	* failed too. And the pointer m_pData will not point to the
	* original space it will point to NULL. It's so easily lead to crashes.
	*/
	m_pData = new char[strlen(str.m_pData) + 1];
	strcpy(m_pData, str.m_pData);
	return *this;	
}

// The better way
CMyString & CMyString::operator=(const CMyString & str)
{
	if(this != &str)
	{
		/*
		* strTemp is local variable just in scope of "if", so when 
		* program run out of the scope of "if", strTemp will call
		* destructor free the area that strTemp.m_pData point at.
		*/
		CMyString strTemp(str); 
		char *strTemp = strTemp.m_pData;
		/*
		 * so the memory where m_pData point at will been free
		 * by strTemp.m_pData with program run out of the scope
		 * of "if"
		 */
		strTemp.m_pData = m_pData; 
		m_pData = pTemp;
	}
	return *this;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

C++中使用初始化列表比在构造函数中对成员变量赋值更高效

今天看到一个面试题,问:为山么在C++中使用初始化列表比在构造函数中对成员变量赋值更高效? 记得在看Scott Meyers的《Effective C++》中有讲到过这个问题,时间久了就想不起来的,真...

C++ 拷贝构造函数和赋值构造函数

重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符。 以下讨论中将用到的例子: class CExample{public:     CExample(){pBuffer=NULL...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

<Effective C++>:Item25:考虑写出一个不抛出异常的swap函数

本文转载,原文见:原博 ①如果 std::swap 对于你的类型来说是低效的,请提供一个 swap 成员函数,并确保你的 swap 不会抛出异常。 ②如果你提供一个成员 swap,请同...

编程交流与学习--More Effective C++的学习-Item M22:考虑用运算符的赋值形式(op=)取代其单独形式(op)

就C++来说,operator+、operator=和operator+=之间没有任何关系,因此如果你想让这三个operator同时存在并具有你所期望的关系,就必须自己实现它们。同理,operator...

C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容

一、本文目的与说明    1. 本文目的:理清在各种继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容。    2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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