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;
}

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

相关文章推荐

《Effective C++》读书笔记之item25:考虑写出一个不抛异常的swap函数

1.STL中有swap()函数可以将两个对象的值相交换,定义类似于: namespace std{ template void swap(T&a, T& b){ T temp(a...

effective c++ 考虑写出一个不抛出异常的swap函数

#include #include #include #include class WidgetImpl{ //...... std::vectorv; }; class Widget...

《Effective C++》读书笔记之item35:考虑virtual函数以外的其他选择

1.虚函数的替代方案有: (1)使用non-virtual interface(NVI)方法,它是Template Method设计模式的一种特殊形式。使客户通过仅有的非虚函数间接调用私有的虚函...

boj problem 1331 思路:快排分块 按块查找 问题:全局数组时可以定义到500W的 main函数下的数组不行~ 另外c语言比c++快 TLE可以考虑C~~具体原因待解决

Arsenal与水杯之间的故事Submit: 1169   Accepted:189Time Limit: 1000MS  Memory Limit: 65535KDescription时间:某一天;...

《Effective C++》item25:考虑写出一个不抛异常的swap函数

std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如: [cpp] view plai...

C++中的函数重载中为什么不考虑返回值类型?

1. 问题描述 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。那为什么不可以是函数名相同,参数列表相同,函数的返回值不同呢? 2. ...

《Effective C++》:条款35:考虑virtual函数以外的其他选择

virtual函数在派生中经常用到,在遇到一些问题时用virtual函数没问题,但是有时候我们应该思考一下是否有替代方案,以此来拓宽我们的视野。

C++构造函数初始化列表与赋值

C++类中成员变量的初始化有两种方式:          构造函数初始化列表和构造函数体内赋值。下面看看两种方式有何不同。        ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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