gpt4 book ai didi

c++ - 关于 Meyers 书中的 operator=()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:47 25 4
gpt4 key购买 nike

我正在阅读 S. Meyers 的书“Effective C++。55 specific ways...”(第 3 版)。这本书中的某些内容,在规则 11 中,我不明白。所以,在下一个代码部分:

Widget& Widget::operator=(const Widget& rhs)
{
Bitmap *pOrig = pb;
pb = new Bitmap(*rhs.pb)
delete pOrig;
return *this;
}

为什么使用“pOrig”?

附言抱歉我的英语不好。

最佳答案

当您在这里处理原始指针时,您必须进行适当的资源管理。在这种情况下,new Bitmap(...) 可能会抛出异常,例如,如果进程内存不足,它不会更改 pb 指向的值因为在分配发生之前会触发异常。

通过引入临时对象,您仍然可以正确管理 Bitmap 对象,因为如果调用 new 成功,旧对象确实会被删除,您不会泄漏内存。

如果您先删除 pb 指向的对象,而 new Bitmap... 代码导致异常,则您的对象处于内部困惑状态。

此外,正如 Angew 在评论中指出的那样,通过使用临时变量来保持内部状态的一致性,您还可以防止 self 赋值,并且可以跳过 self 赋值测试作为附带好处。

关于c++ - 关于 Meyers 书中的 operator=(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29830737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com