浅拷贝:
两个辅助变量指向同一内存空间,有一个对象obj2把指向的同一内存空间析构掉,而obj1会再一次析构这一内存空间,在这个时候就会发生错误,obj1会指向一个垃圾值,会出现野指针的现象;
解决此问题的方案为深拷贝
浅拷贝
#include<iostream>
using namespace std;
class test
{
public:
test(char *myp)
{
int len = strlen(myp);
p = (char*)malloc(len + 1);
}
~test()
{
if (p != NULL)
{
free(p);
}
}
private:
char *p;
int len;
};
void objplay()
{
test obj1("abcd");
test obj2 = obj1;
}
void main()
{
objplay();
system("pause");
}
//深拷贝
#include "iostream"
using namespace std;
class Location
{
public:
Location(char *p) //一个参数的构造函数
{
m_len = strlen(p);
m_p = (char *)malloc(m_len + 1);
strcpy(m_p, p);
}
Location(const Location &obj) //深拷贝 拷贝构造函数 显示编写
{ //如果不显示编写,将会调用默认的拷贝构造函数进行浅拷贝
m_len = obj.m_len;
m_p = (char *)malloc(m_len + 1);
strcpy(m_p, obj.m_p);
}
void prinT()
{
cout << m_p << endl;
}
private:
char *m_p;
int m_len;
};
void main()
{
Location obj1("zhangwentao");
Location obj2 = obj1;
obj1.prinT();
obj2.prinT();
system("pause");
}