深拷贝和浅拷贝
#千锋物联网逆战班#
别人再好,也是别人。自己再不堪,也是自己,独一无二的自己。只要努力去做最好的自己,一生足矣。为自己的人生负责,为自己的梦想买单。
1、浅拷贝
同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然 是独立的两个对象,这种情况被称为浅拷贝.一般情况下,浅拷贝没有任何副作 用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动态内 存释放的处理,会导致内存问题。
2、深拷贝
当类中有指针,并且此指针有动态分配空间,析构函数做了释放处 理,往往需要自定义拷贝构造函数,自行给指针动态分配空间,深拷贝。
案例:
class Person
{
public: Person(char* name,int age)
{
pName = (char*)malloc(strlen(name) + 1);
strcpy(pName,name); mAge = age;
} //增加拷贝构造函数
Person(const Person& person)
{
pName = (char*)malloc(strlen(person.pName) + 1);
strcpy(pName, person.pName); mAge = person.mAge;
}
~Person()
{
if (pName != NULL){ free(pName);
}
}
private:
char* pName;
int mAge;
};
void test()
{
Person p1("Edward",30);//用对象p1初始化对象p2,调用c++提供的默认拷贝构造函数
Person p2 = p1;
}