读书人

关于种中重载=号运算符

发布时间: 2013-02-17 10:44:46 作者: rapoo

关于类中重载=号运算符
在一个需要深度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=
[解决办法]

引用:
在一个需要深度copy的类中, 重载赋值运算符第一步是使用delete[]释放这些数据 如:
class People
{
char * name;
}
构造函数不写了
People & People::operator= ( const People & P1)
{
if(*this==P1){
ret……

存在,生命周期在你主函数解释的时候,全部析构掉
[解决办法]
1. 复制构造函数和赋值函数都要处理(上面调用的是复制构造函数)
2. VS2012的话, 还要处理转移构造函数和转移赋值函数
3. 最简单的方法是: 用std::string代替 char*

读书人网 >C++

热点推荐