C++ primer 第三版中的一个小问题

在原书453~455页有这样一段代码,是用来写拷贝赋值函数的。
HasPtr& HasPtr::operator=(const HasPtr &rhs)
{
auto newp = new string(*rhs.ps); //拷贝底层string
delete ps; //释放旧内存
ps = newp; //从右侧运算对象拷贝数据到本对象
i = rhs.i;
return *this; //返回本对象
}
这个函数中,用new申请了一段内存,为什么在离开是没有delete掉呢?
auto在这里应该不会把newp定义为一个shared ptr 智能指针对象吧?求解...

4个回答

哦,原来,那块内存现在被ps所指。

新申请的内存还是被ps所指,ps是成员变量吧?

因为在HasPtr的析构函数里面会删除那段内存

当然没有被delete掉,是先delete了ps指的内存,ps再指向新申请 的内存,现在ps指向申请的内存还保留着。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!