c++种的浅拷贝与深拷贝

具体看如下注释和代码:

#define  _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;

class Name
{
public:
	Name(const char* pname)
	{
		size = strlen(pname);
		pName = (char*)malloc(size + 1);
		strcpy(pName, pname);
		cout << "调用11" << endl;
	}
	Name(Name& obj)
	{
		//用obj来初始化自己
		pName = (char*)malloc(obj.size + 1);
		strcpy(pName, obj.pName);
		size = obj.size;
		cout << "调用22" << endl;
	}
	~Name()
	{
		cout << "开始析构" << endl;
		if (pName != NULL)
		{
			free(pName);
			pName = NULL;
			size = 0;
		}
	}

	void operator=(Name& obj3)
	{
		if (pName != NULL)
		{
			free(pName);
			pName = NULL;
			size = 0;
		}
		//用obj3来=自己
		pName = (char*)malloc(obj3.size + 1);
		strcpy(pName, obj3.pName);
		size = obj3.size;
		cout << "重载运算操作符" << endl;
	}

protected:
private:
	char* pName;
	int size;
};

//对象的初始化 和 对象之间=号操作是两个不同的概念
void playObj()
{
	Name obj1("obj1....."); //输出:调用11
	Name obj2 = obj1; //这里调用的是拷贝构造函数,输出:调用22

	Name obj3("obj3...");  //输出:调用11

	//重载=号操作符
	obj2 = obj3; //=号操作,输出:重载运算操作符

	cout << "业务操作。。。5000" << endl;

}
void main()
{
	playObj();
	system("pause");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值