/*
默认拷贝构造,对于数据只是值传递,对于指针 ,则指向同一片内存地址
类的内部有指针并分配内存的,需要深拷贝,否则浅拷由。
深拷贝需要自己手动
*/
#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();
//}
深拷贝
最新推荐文章于 2024-11-07 19:15:22 发布