| 关于拷贝构造函数和赋值运算符 |
|
|
|
|
| 来源: 作者: 添加日期:2006-7-17 6:47:58 点击次数: |
|
但"="的缺省操作只是将成员变量的值相应复制。旧的值被自然丢弃。
由于对象内包含指针,将造成不良后果:指针的值被丢弃了,但指针指向的内容并未释放。指针的值被复制了,但指针所指内容并未复制。
因此,包含动态分配成员的类除提供拷贝构造函数外,还应该考虑重载"="赋值操作符号。
类定义变为:
class CExample { ... CExample(const CExample&); //拷贝构造函数 CExample& operator = (const CExample&); //赋值符重载 ... };
//赋值操作符重载 CExample & CExample::operator = (const CExample& RightSides) { nSize=RightSides.nSize; //复制常规成员 char *temp=new char[nSize]; //复制指针指向的内容 memcpy(temp,RightSides.pBuffer,nSize*sizeof(char));
delete []pBuffer; //删除原指针指向内容 (将删除操作放在后面,避免X=X特殊情况下,内容的丢失) pBuffer=temp; //建立新指向 return *this }
三、拷贝构造函数使用赋值运算符重载的代码。
CExample::CExample(const CExample& RightSides) { pBuffer=NULL; *this=RightSides //调用重载后的"=" }
|
|
| |