在一个需要深度copy的类中, 重载赋值运算符第一步是使用delete[]释放这些数据 如:
class People
{
char * name;
}
构造函数不写了
People & People::operator= ( const People & P1)
{
if(*this==P1){
return *this;
}
delete[] name; ////////.................*
int len;
len=strlen(P1.name);
name=new char[len+1];
strcpy(name,P1.name);
return *this;
}
int main()
{
People P1;
People P2=P1; ////问题在这里: P2还不存在 .......* 的delete 不是要出错了??
}
c++
------解决方案--------------------------------------------------------
People P2=P1;
调用复制构造函数,不是operator=
------解决方案--------------------------------------------------------
存在,生命周期在你主函数解释的时候,全部析构掉
------解决方案--------------------------------------------------------
1. 复制构造函数和赋值函数都要处理(上面调用的是复制构造函数)
2. VS2012的话, 还要处理转移构造函数和转移赋值函数
3. 最简单的方法是: 用std::string代替 char*