说到深浅拷贝前,先来看两个现象,关于基本类型和类对象的赋值、复制,看看有什么奇怪的事情发生。
=
号运算时,现象和我们常理是相同的,不存在异样int a = 10;
int b = a;
b = 2;
它们之间的赋值、复制过程是很简单的。但是对于类对象来说,其内部存在各种类型成员变量,在拷贝过程中会出现问题。如下:
#include
#include
using namespace std;
class String
{
public:
String(const char* psz = NULL) : m_psz(strcpy((new char[strlen(psz ? psz : "") + 1]), psz ? psz : ""))
{
cout << "String构造" << endl;
}
~String()
{
if (m_psz)
{
delete[] m_psz;
m_psz = NULL;
}
cout << "String析构" << endl;
}
char* c_str(void)
{
return m_psz;
}
private:
char* m_psz;
};
int main()
{
String s1("hello");
String s2(s1);
cout << "s1 " << s1.c_str() << endl;
cout << "s2