C++ Primer 第五版 中文版 练习 13.23
题目:比较上一节练习中你编写的拷贝控制成员和这一节中的代码。确定你理解了你的代码和我们代码之间的差异(如果有的话)。
答:
我的代码:
HasPtr& HasPtr::operator=(const HasPtr &HP)
{
ps = HP.ps;
i = HP.i;
return *this;
}
书上的代码:
HasPtr& HasPtr::operator=(const HasPtr &HP)
{
auto newp = new string(*HP.ps); //拷贝底层string
delete ps; //释放旧内存
ps = newp; //从右侧运算对象拷贝数据到本对象
i = HP.i;
return *this; //返回本对象
}
确实有差异, 我本来理解的是拷贝赋值运算符,直接拷贝指针的值,也就是直接拷贝地址即可。
书上的代码是直接拷贝指针指向的值,然后删除旧的指针,再把新的指针值也就是地址赋值给对象的string 指针成员。