浅拷贝:统一类型对象之间可以赋值,使用两个对象的成员变量的值相同,两个对象仍是独立的两个对象。
一般情况下,浅拷贝没有任何问题,但是当类中有指针,并且指针指向动态分配的内存 空间,析构函数做了动态内存释放的处理,会导致内存问题
#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_name = (char*)malloc(strlen(p.m_name) + 1);
strcpy(m_name, p.m_name);
m_age =p.m_age;
}
~Person()
{
cout << "执行析构函数...." << endl;
if (m_name != nullptr)
{
free(m_name);
}
}
public:
char *m_name;
int m_age;
};
int main()
{
Person p1((char*)("张三"),18);
Person p2(p1);
}