摘要: 设计良好的面向对象系统会将对象的内部封装起来,只留两个函数负责对象拷贝,即copy构造函数与copy assignment操作符。编译器会在必要的时候为类创建coping函数,并说明这些“编译器生成版”的行为:将被拷贝对象的所有成员变量都做一份拷贝。任何时候,只要自己实现派生类的copying函数,则必须很小心的复制其基类成分。这些成分往往是private私有的,故无法直接访问它们,因此应该让派送类的coping函数调用相应的基类函数:void logCall(const string& funcName); class Customer { public: ... Customer. 阅读全文
posted @ 2013-12-11 02:07 陌上归人 阅读(433) 评论(0) 推荐(0) 编辑
摘要: “自我赋值”发生在对象被赋值给自己时:class Widget{ ...};Widget w;...w = w; //赋值给自己operator=,不仅不具备“自我赋值安全性”,也不具备“异常安全性”。让operator= 具备“异常安全性”往往自动获得“自我赋值安全性”的回报。因此越来越多的人对“自我赋值”的处理态度是不去管它,而把焦点放在实现“异常安全性”上。确保代码不但“异常安全”而且“自我赋值安全”的一个替代方案是,使用所谓的copy and swap技术。此技术和“异常安全性”有密切关系,它是一个常见而够好的operator=撰写办法,其实现方式为:class Widget{pub. 阅读全文
posted @ 2013-12-11 00:54 陌上归人 阅读(388) 评论(0) 推荐(0) 编辑