浅拷贝:
同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然 是独立的两个对象,这种情况被称为浅拷贝. 一般情况下,浅拷贝没有任何副作 用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动态内 存释放的处理,会导致内存问题。
d
#include<iostream>
#include <cstring>
using namespace std;
class Person
{
private:
char *m_name;
int m_age;
public:
Person(const char *name, int age)
{
m_name = (char*)calloc(1, strlen(name)+1);
if (m_name == NULL)
{
cout << "申请空间失败" << endl;
}
strcpy_s(m_name, strlen(name) + 1, name);
m_age = age;
cout << "申请空间" << endl;
}
Person()
{
cout << "默认构造函数" << endl;
}
~Person()
{
if (m_name != NULL)
{
free(m_name);
m_name = NULL;
}
cout << "调用析构函数释放空间" << endl;
}
Person(const Person &sg)
{
m_name = (char*)calloc(1, strlen(sg.m_name)+1);
strcpy_s(m_name, strlen(sg.m_name) + 1, sg.m_name);
m_age = sg.m_age;
cout << "拷贝构造函数申请空间" << endl;
}
};
void test01()
{
Person ying("yingyu", 10);
Person tian = ying;
}
void main()
{
test01();
}
拷贝构造函数中再次申请空间,析构时会依次释放空间。