当类中有指针类型成员变量时要用深层拷贝(重新分配新的内存区),
否则由于编译类自动产生的是浅动拷贝,=赋值时两个对象的成员变量会只向同一内存区,则当析构时此内存区会释入两次,导致内存泄漏或程序崩溃。
如:
class string
{
private:
char *m_str;
public:
string(char *s) { m_str=s; }
string(){};
/*string&operator=(const string s)
{
m_str=s.m_str;
return *this
}浅程拷贝*/
string&operator(const string&s)
{
if(strlen(m_str)!=strlen(s.m_str))
m_str=new char[strlen(s.m_str)+1];
if(*this!=s)
strcmp(m_str,s.m_str);
return *this;
}//深层拷贝
};
int main()
{
string s1("abc"),s2;
s2=s1;
cout<<s2.m_str;
}