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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jlran/article/details/52700111
#include <iostream>
//在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,
//采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误

//? 默认复制构造函数可以完成对象的数据成员值简单的复制
//?对象的数据资源是由指针指示的堆时,默认复制构造函数仅作指针值复制
//
//浅拷贝程序C++提供的解决方法
//显示提供copy构造函数
//显示操作重载=号操作,不使用编译器提供的浅copy
using 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;
}

猜你喜欢

转载自blog.csdn.net/jlran/article/details/52700111