证同测试

复制构造函数与复制赋值的区别如下:

class Name {

    const char* s;

    //...

};

class Table {

    Name* p;

    size_t sz;

public:

    //...

    Table(const Table&);    //复制构造函数

    Table& operator=(const Table&);    //复制赋值

};

Table::Table(const Table& t) {    /*复制构造函数*/

    p=new Name[sz=t.sz];

    for(int i=0;i<sz;++i) p[i]=t.p[i];

}

Table& Table::operator=(const Table& t) {    /*赋值*/

    if(this != &t) {    /*当心自赋值:t=t,证同测试*/

        delete[] p;

        p=new Name[sz=t.sz];

        for(int i=0;i<sz;++i) p[i]=t.p[i];

    }

    return *this;

}

复制构造函数是去完成对未初始化的存储区的初始化,而复制赋值运算符则必须正确处理一个

结构良好的对象。赋值运算符的一般性策略非常简单:防止自赋值,删除那些老元素,初始化,

复制那些新元素。

原文地址:https://www.cnblogs.com/donggongdechen/p/9691175.html