摘要: copy构造函数和copy assignment操作符,我们称他们为copying函数。这些“编译器生成版”的行为:将被烤对象的所有成员变量 都做一份拷贝。 声明自己的copying函数, void logCall(const std::string funcName); class Customer { public: Custo... 阅读全文
posted @ 2012-01-13 22:49 lidan 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 假设建立一个class来保存一个指针指向一块儿动态分配的位图(bitmap) class Bitmap{...}; class Widget { public: protected: private: Bitmap* pb; }; 这个operator=实现代码表面看上来合理, 但自我赋值出现时并不安全,也不... 阅读全文
posted @ 2012-01-13 21:34 lidan 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 赋值的连锁式 x=y=z=3;被解析成x=(y=(z=3));为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参, 这是你为class实现赋值操作符时应该遵循的协议: class Widget { public: Widget& operator=(const Widget& rhs) //返回类型是referenc... 阅读全文
posted @ 2012-01-13 16:46 lidan 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 每当创建一个交易对象,在审计日志中也要创建一笔适当记录。下面是一个看起来比较合理的做法: class Transaction { public: Transaction() { init(); } virtual void logTransaction() const { std::cout << "tran... 阅读全文
posted @ 2012-01-13 15:53 lidan 阅读(591) 评论(0) 推荐(0) 编辑
摘要: c++并不禁止析构函数抛出异常,但它不鼓励这样做: class Widget{ public: … ~Widget(); //假设可能抛出异常 }; void doSomething() { std::vector<Widget> v; … } 当vector v被销毁,它有责任销毁其内含的所有W... 阅读全文
posted @ 2012-01-13 10:29 lidan 阅读(740) 评论(1) 推荐(0) 编辑