2012年9月2日

Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value

摘要: 要点:尽量以pass-by-reference-to-const替换pass-by-value,这通常比较高效,并可避免由子类对象拷贝成基类时的对象切割问题对于内值类型、STL迭代器和函数对象应该采用pass-by-value的形式。缺省情况下c++以by value 的方式传递对象(或来自)函数。函数参数是以实参的副本为初值,用函数获得的也是函数返回值的一个副本 这些副本由对象的copy构造函数产出,这可能使得pass-by-value成为昂贵的操作:class Person { public: Person(); virtual ~Person(); protected: ... 阅读全文

posted @ 2012-09-02 20:15 as_ 阅读(576) 评论(0) 推荐(0) 编辑

Effective C++条款9:绝不在构造和析构函数过程中调用virtual函数

摘要: 要点:不该在构造函数和析构函数期间调用virtual函数class Transaction //所有交易的基类 {public: Transaction(); virtual void logTransaction() const = 0;//做出一份因类型不同而不同 //的日志记录 }; Transaction::Transaction() //基类构造函数的实现 { l... 阅读全文

posted @ 2012-09-02 19:21 as_ 阅读(958) 评论(0) 推荐(0) 编辑

Effective C++条款7:为多态基类声明virtual析构函数

摘要: 要点:带多态性质的基类或者class中有virtual函数,就应该将析构函数声明为virtual,例如class TimeKeeper{public: TimeKeeper(); ~TimeKeeper();};class AtomicClck : public TimeKeeper //原子钟 { }; class WaterClck : public TimeKeeper //水钟 { }; class WristClck : public TimeKeeper //腕表 { };int main(){ TimeKeeper * ptk = getTi... 阅读全文

posted @ 2012-09-02 15:49 as_ 阅读(316) 评论(0) 推荐(0) 编辑

Effective C++条款4:确认对象钱已经被初始化

摘要: 要点:构造函数内赋值和使用初始化列表区别在于1).因为const成员只能被初始化,不能被赋值,所以必须利用构造函数初始化列表进行初始化 eg:class Point { public: Point():_x(0),_y(0){}; Point( int x, int y ):_x(x),_y(y){} //Point(){ _x = 0; _y = 0;} 错误 //Point( int x, int y ){ _x = 0; _y = 0; } 错误private: const int ... 阅读全文

posted @ 2012-09-02 10:41 as_ 阅读(367) 评论(0) 推荐(0) 编辑

导航