复制构造函数与复制赋值的区别如下:
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;
}
复制构造函数是去完成对未初始化的存储区的初始化,而复制赋值运算符则必须正确处理一个
结构良好的对象。赋值运算符的一般性策略非常简单:防止自赋值,删除那些老元素,初始化,
复制那些新元素。