C/C++教程

C++ || 运算符重载与拷贝构造

本文主要是介绍C++ || 运算符重载与拷贝构造,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

拷贝构造函数

拷贝构造函数用一个已存在的对象给另一个正在生成的对象初始化的时候自动调用的成员方法

如果没有自己实现,会自动生成一个浅拷贝的拷贝构造(影响堆上内存=>指针)
如果自己实现,就不会生成
注意:

  1. 拷贝构造要防止浅拷贝
  2. 拷贝构造函数一定要传引用,防止死递归
	Person(const Person& src)
	{
		cout << "Person(const Person& src)" << endl;
		_age = src._age;
		_sex = src._sex;
		_name = new char[strlen(src._name) + 1];
		memset(_name,0, strlen(src._name) + 1);
		for (int i = 0; i < strlen(src._name); i++)
		{
			_name[i] = src._name[i];
		}
	}

等号运算符重载

等号运算符重载使用一个已存在的对象,给另一个已存在的对象赋值时自动调用的成员方法
如果不自己实现,就会自动生成一个浅拷贝的等号运算符重载
注意:

  1. 防止自赋值
  2. 防止内存泄漏
  3. 防止浅拷贝
	Person& operator=(const Person& src)
	{//等号运算符重载  返回引用 保证返回对象一定存在
		cout << "	void operator=(const Person& src)" << endl;

		//防止自赋值
		if (this == &src)
		{
			return *this ;
		}
		//防止内存泄漏
		delete[] _name;
		//防止浅拷贝
		_name = new char[strlen(src._name) + 1];
		memset(_name, 0, strlen(src._name) + 1);
		for (int i = 0; i < strlen(src._name); i++)
		{
			_name[i] = src._name[i];
		}
		return *this;
	}

拷贝构造与等号运算符重载的区别:
拷贝构造是用一个已存在的对象给一个正在生成的对象初始化
等号运算符重载是用一个已存在的对象给另一个已存在的对象赋值
int a;
int c= int ();
int b(a); //拷贝构造
int d = a; //拷贝构造
c = a; //等号运算符重载

这篇关于C++ || 运算符重载与拷贝构造的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!