1.浅拷贝
浅拷贝就是简单的赋值操作,引用的变量名不同,但是指向的都是同一个地址,如果属性在堆区开辟了空间,浅拷贝会出现重复释放内存空间的问题。代码示例:
#include <iostream> //C++标准输入输出头文件
#include <string>
using namespace std;
class Person {
public:
//属性
//有参构造函数
Person(int age, string name)
{
C_age = age;
C_name = new string(name);
cout << "有参构造函数" << C_age << endl;
}
~Person()
{
if (C_name != NULL)
{
delete C_name;
C_name = NULL;
}
cout << "析构函数" << endl;
}
int C_age;
string* C_name;
};
void test1(void)
{
Person P1(100,"小明");
Person P2(P1);
cout << P1.C_age << P1.C_name << endl;
cout << P2.C_age << P2.C_name << endl;
}
int main()
{
test1();
system("pause");
return 0;
}
上述代码会因为析构函数重复释放同一个内存地址导致程序崩溃。
2.深拷贝
深拷贝,拷贝的时候先开辟出和源对象大小一样的空间,然