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

 

彼は199元記事に公開 ウォン称賛77 ビューに20万+を

おすすめ

転載: blog.csdn.net/tianguiyuyu/article/details/104017218