深拷贝

来源:互联网 发布:ovs linux网桥 编辑:程序博客网 时间:2024/05/01 15:11
/*默认拷贝构造,对于数据只是值传递,对于指针 ,则指向同一片内存地址类的内部有指针并分配内存的,需要深拷贝,否则浅拷由。深拷贝需要自己手动*/#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};//全部初始为 0strcpy(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();//}

0 0
原创粉丝点击