深拷贝与先拷贝
-
浅拷贝
同一类型的对象之间可以赋值,使得两个对象的成员变量相同,两个对象仍然是独立的两个对象,这种情况下称为浅拷贝。
一般情况下,浅拷贝没有任何的副作用,但是当类中有指针,而且指针指向动态分配的内存空间,析构函数做了动态内存释放的处理,会导致内存问题。
主要问题出现在----析构函数的析构上 -
深拷贝
当类中有指针时,并且此指针有动态分配空间,析构函数做了释放处理,往往需要自定义拷贝构造函数,自行给指针分配空间,完成深拷贝。
Person(const Person& p)//深拷贝
{
m_Name = (char*)malloc(strlen(p.m_Name)+1);
strcpy(m_Name,p.m_Name);
m_age = p.m_age;
};
代码:
#include<iostream>
using namespace std;
class Person
{
public:
Person();
Person(char* name,int age)
{
m_Name = (char*)malloc(strlen(name)+1);//分配空间
strcpy(m_Name,name);
m_age = age;
}
Person(const Person& p)//深拷贝
{
m_Name = (char*)malloc(strlen(p.m_Name)+1);
strcpy(m_Name,p.m_Name);
m_age = p.m_age;
};
~Person()
{
if(m_Name != NULL)
free(m_Name);
}
public:
char* m_Name;
int m_age;
};
void text01()
{
Person p1("hello",10);
cout<<p1.m_Name<<p1.m_age<<endl;
Person p2(p1);
cout<<p2.m_Name<<p2.m_age<<endl;
}
void main()
{
text01();
}
运行结果: