浅拷贝
同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然是独立的两个对象,这种情况被称为浅拷贝.
一般情况下,浅拷贝没有任何副作用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动态内存释放的处理,会导致内存问题。浅拷贝会释放堆区空间两次,导致挂掉。
深拷贝
当类中有指针,并且此指针有动态分配空间,析构函数做了释放处理,往往需要自定义拷贝构造函数,自行给指针动态分配空间,深拷贝。
main.cpp
#define _CRT_SECURE_NO_WARNINGS
#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_age = p.m_age;
m_Name = (char*)malloc(strlen(p.m_Name) + 1);
strcpy(m_Name, p.m_Name);
}
~Person()
{
cout << "析构函数调用" << endl;
if (m_Name!=NULL)
{
free(m_Name);
m_Name = NULL;
}
}
//姓名
char * m_Name;
//年龄
int m_age;
};
void test01()
{
Person p1("敌法",10);
Person p2(p1); //调用拷贝构造
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}