C++赋值运算符重载

系统中有默认的赋值函数,若类的数据成员中有指针,则需要程序员自己写一个赋值运算符重载,让两个对象里的指针指向两个不同的内存单元中,防止在函数结束时调用析构函数,释放同一块空间,触发异常中断。

步骤思想:

1.判断是否为自赋值,自赋值直接返回本身

2.先释放左值对象原有的空间

3.再给左值对象开辟一个和右值对象同样大小的空间

4.将右值对象所指向的空间里的内容复制给左值对象所指向空间

5.引用返回

//赋值运算符重载代码
class A
{
public:
	A(const char* name = "\0") 
	{
		m_name = new char[strlen(name) + 1];
		strcpy_s(m_name,strlen(name)+1, name);
	}
	void Printf()
	{
		cout << "name  " << m_name << endl;
	}
	A& operator=(const A& b)//将对象b加上const,是为了提高健壮性,b给a赋值,b不能被改变
	{
		if (this == &b)//判断是否存在自己给自己赋值的情况,如a=a
		{
			return *this;//直接返回自己本身,节省时间
		}
		delete[]m_name;
		m_name = new char[strlen(b.m_name) + 1];
		strcpy_s(m_name, strlen(b.m_name) + 1, b.m_name);
		return *this;
	}
	~A()
	{
		delete[]m_name;
		m_name = NULL;
	}
private:
	char* m_name;
};

int main()
{
	A a("baobao");//调用构造函数
	A b("pangpang");
	a.Printf();
    b.Printf();
	b=a;//将a赋值给b
    b.Printf();
}

运行结果:

C++赋值运算符重载_第1张图片

 

你可能感兴趣的:(c++,开发语言)