详细解析:为什么要写自定义拷贝构造函数和赋值运算符

 我来答
匿名用户
2017-12-08
展开全部
#include <string.h>
#include <iostream.h>

class Name{
public:
Name(){ pName = 0; }
Name(char* pn){ copyName(pn); }
Name(Name & s){ copyName(s.pName); }
~Name(){ deleteName(); }
Name & operator =(Name & s) //赋值运算符
{
deleteName();
copyName(s.pName);
return *this;
}
void display(){ cout << pName << endl; }
protected:
void copyName(char* pN);
void deleteName();
char* pName;
};

void Name::copyName(char* pN)
{
pName = new char[strlen(pN) + 1];
if(pName)
strcpy(pName, pN);
}

void Name::deleteName()
{
if(pName){
delete pName;
pName = 0;
}
}

void main()
{
Name s("claudette");
Name t("temporary");
t.display();
t = s; //赋值
t.display();
}
在构造函数中该存储区是从堆中分配来的,存在浅拷贝问题,必须自定义赋值运算符和拷贝构造函数。
赋值运算符以operator=()的名称出现,看起来像一个析构函数后面跟着拷贝构造函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式