我是S. Meyers和#34; Effective C ++的读书。 55具体方式......" (第3版)。在本书的某些内容中,在规则11中我并不理解。所以,在下一个代码部分:
Widget& Widget::operator=(const Widget& rhs)
{
Bitmap *pOrig = pb;
pb = new Bitmap(*rhs.pb)
delete pOrig;
return *this;
}
为什么" pOrig"使用
P.S。抱歉我的英语不好。
答案 0 :(得分:12)
当你在这里处理原始指针时,你必须进行适当的资源管理。在这种情况下,new Bitmap(...)
可能会抛出,例如,如果进程内存不足,并且它不会更改pb指向的值,因为异常将在任务发生。
通过引入临时,您仍然可以正确管理Bitmap对象,因为如果对new
的调用成功,旧对象会被删除,并且您不会泄漏内存。
如果先删除pb指向的对象,并且new Bitmap...
代码导致异常,则对象处于内部混乱状态。
另外,正如Angew在评论中指出的那样,通过使用临时来保持内部状态的一致性,你也可以防止自我指派,并且可以跳过自我指派测试作为附带利益。