深拷贝

/*
默认拷贝构造,对于数据只是值传递,对于指针 ,则指向同一片内存地址
类的内部有指针并分配内存的,需要深拷贝,否则浅拷由。
深拷贝需要自己手动
*/
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
using namespace std;

//数据的拷贝是浅拷贝
class MyClass
{
public:
	int a;
	int b;
	void show()
	{
		cout << "a:" << a << " b:" << b << endl;
	}
	MyClass(int x, int y) :a(x), b(y)
	{

	}
};

void main15A()
{
	MyClass my1(1,2);
	MyClass my2(my1);
	my1.show();
	my2.show();

	cin.get();
}
//默认拷贝构造,对于数据只是值传递,对于指针 ,则指向同一片内存地址
class MyString
{
public:
	char *pstr;
	int length;
	MyString(char *str)
	{
		this->length = strlen(str) + 1;
		this->pstr = new char[this->length]{0};//全部初始为 0
		strcpy(this->pstr, str);	//
	}
	void show()
	{
		cout << "length:" << length << " pstr地址:" << (void *)pstr << "  *pstr:" << pstr << endl;
	}
	~MyString()
	{
		delete[] pstr;
	}
	MyString(const MyString &ms)
	{
		this->length = ms.length;
		this->pstr = new char[this->length]{0};
		strcpy(this->pstr, ms.pstr);	//拷贝内容
	}

};

void main15B()
{
	MyString ms1("shanghai");
	MyString ms2(ms1);
	ms1.show();
	ms2.show();
	ms1.~MyString();
	ms2.show();

	cin.get();
}

	/*
	下面代码 调用 析构函数 回车结束时就报错....
	*/
//class Stu
//{
//public:
//	int *p;
//	int size;
//	Stu(int x) :size(x)
//	{
//		p = new int[size];
//	}
//	Stu(const Stu &st)
//	{
//		size = st.size;
//		p = new int[size];
//	}
//	~Stu()
//	{
//		delete[] p;
//	}
//	void show()
//	{
//		cout << "size:" << size << " *p" << p << endl;
//	}
//};
//
//void main()
//{
//	Stu stu1(10);
//	Stu stu2(stu1);
//	stu1.show();
//	stu1.~Stu();
//	stu2.show();
//
//
//	cin.get();
//}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值