当前位置: 代码迷 >> C++ >> 关于种中重载=号运算符
  详细解决方案

关于种中重载=号运算符

热度:1988   发布时间:2013-02-26 00:00:00.0
关于类中重载=号运算符
在一个需要深度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*
  相关解决方案