[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;}
//?默认复制构造函数可以完成对象的数据成员值简单的复制//?对象的数据资源是由指针指示的堆时,默认复制构造函数仅作指针值复制////浅拷贝程序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;}
相关文章推荐
- c++拷贝文件
- c++文件拷贝
- C++深拷贝与浅拷贝
- 探讨C++中对象的“浅拷贝”与“深拷贝”[转]
- C++中的位拷贝和值拷贝
- C++箴言:谨慎考虑资源管理类的拷贝行为
- C++文件拷贝代码
- C++中的位拷贝和值拷贝
- C++深拷贝与浅拷贝
- C++对象的拷贝与赋值操作
- C++练习:一个具有深拷贝功能的字符串类
- C/C++面试之算法系列--几个典型的内存拷贝及字符串函数实现
- C++的=运算符重载并非简单内存拷贝
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++对象的拷贝与赋值操作
- C++ 16 拷贝字符串
- C++深拷贝与浅拷贝
- C++拷贝构造函数(深拷贝,浅拷贝)
- VC/MFC(C++)实现文件拷贝和文件删除等
- C++的std::string的“读时也拷贝”技术!