- 默认复制构造函数可以完成对象的数据成员值简单的复制
- 对象的数据资源是由指针指示的堆时,默认复制构造函数仅作指针值复制
-
1浅拷贝问题抛出和分析
深拷贝浅拷贝现象出现的原因
-
-
2浅拷贝程序C++提供的解决方法
显示提供copy构造函数
显示操作重载=号操作,不使用编译器提供的浅copy
-
#include <iostream> #include <stdlib.h> #include <string.h> #include <windows.h> using namespace std; class Test1{ public: //有参构造函数 Test1(const char* myp) { this->len = strlen(myp);//sizeof包含/0 strlen不包括/0 this->p = (char*)malloc(len+1);//+1 给/0 strcpy(p,myp); cout<<"有参构造函数"<<endl; } //Test1 t2 = t1;//默认的copy构造函数 由c++编译器提供 自己写深拷贝 Test1(const Test1 &obj) { int len = obj.len; p = (char*)malloc(len+1);//+1 给/0 strcpy(p,obj.p); cout<<"深拷贝 构造函数"<<endl; } //析构构造函数 ~Test1(){ if(p != NULL) { free(p); len = 0; p = NULL; } } public: private: char *p; int len; }; void objplaymain(){ //定当类中定义了拷贝构造函数时,c++编译器不会提供无参数构造函数 Test1 t1("abcdefg");//调用默认的构造函数 Test1 t2 = t1;//默认的copy构造函数 由c++编译器提供 Test1 t3("obj3"); t3 = t1;//对象的默认的=操作也是浅拷贝 } int main() { objplaymain(); cout<<"hello...."<<endl; system("pause"); return 0; }
深拷贝浅拷贝
最新推荐文章于 2024-05-22 00:03:53 发布