您的位置:首页 > 编程语言 > C语言/C++

[c++]深拷贝和浅拷贝

2016-09-29 10:58 148 查看
#include <iostream>//在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,//采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误
//?默认复制构造函数可以完成对象的数据成员值简单的复制//?对象的数据资源是由指针指示的堆时,默认复制构造函数仅作指针值复制////浅拷贝程序C++提供的解决方法//显示提供copy构造函数//显示操作重载=号操作,不使用编译器提供的浅copyusing namespace std;class test{public: test(const char *pName){ size = strlen(pName); this->pName = (char *)malloc(size+1); strcpy(this->pName, pName); } test(test &obj){ pName = (char *)malloc(obj.size+1); strcpy(this->pName, obj.pName); size = obj.size; } //析构函数 ~test(){ if(pName != NULL){ cout << "我是析构函数..." << endl; free(pName); pName = NULL; //避免野指针 size = 0; getchar(); //测试析构函数 } } //深拷贝 void operator=(test &obj){ if(pName != NULL){ free(pName); pName = NULL; size = 0; }
pName = (char *)malloc(obj.size + 1); strcpy(pName, obj.pName); size = obj.size; }private: char *pName; int size;};
int main(){ ////对象的初始化和对象之间=号操作是两个不同的概念 test t1("t1");  test t2 = t1; //创建并初始化 test t3("t3");
t2 = t3; //重载=  //加上断点 可测试 getchar(); return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: