多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 浅拷贝 同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然是独立的两个对象,这种情况被称为浅拷贝. 一般情况下,浅拷贝没有任何副作用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动态内存释放的处理,会导致内存问题。 **如果只是简单复制会调用自带的拷贝构造,那是浅拷贝** **浅拷贝会有重复free内存空间的隐患** ![](https://img.kancloud.cn/d8/5a/d85af523bcdc0ad9fae92d036c50db26_546x390.png) # 深拷贝 当类中有指针,并且此指针有动态分配空间,析构函数做了释放处理,往往需要自定义拷贝构造函数,自行给指针动态分配空间,深拷贝 ![](https://img.kancloud.cn/a8/3e/a83e94bff30ea1132ce4495aa299ca97_566x373.png) ~~~ class Person { private: char* pName; int mAge; public: Person(const char * name, int age) { pName = (char *)malloc(strlen(name) + 1); strcpy(pName, name); mAge = age; cout << "有参构造" << endl; } //增加拷贝构造函数 Person(const Person& person) { pName = (char*)malloc(strlen(person.pName) + 1); strcpy(pName, person.pName); mAge = person.mAge; cout << "拷贝构造" << endl; } ~Person() { if (pName != NULL) { free(pName); pName = NULL; } } }; int main() { Person p1("abc", 30); //用对象p1初始化对象p2,调用c++提供默认拷贝构造函数 Person p2 = p1; system("pause"); return EXIT_SUCCESS; } ~~~