博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2011年7月8日

摘要: 条款41: 了解隐式接口和编译期多态对template参数而言,接口是隐式的implicit,奠基于有效表达式。多态则是通过template具现化和函数重载解析(function overloading resolution)发生于编译器。template<typename T>void doProcessing(T& w) {if (w.size() > 10 && w != someNastyWidget) {T temp(w);temp.normalize();temp.swap(w);}}//w要支持的接口由template中执行于w身上的操作 阅读全文

posted @ 2011-07-08 21:28 李大嘴 阅读(509) 评论(0) 推荐(0) 编辑

摘要: 条款26: 尽可能延后变量定义式的出现时间01 //方案A和B哪个比较好?02 //方案A03 Widget w;04 for (int i = 0; i < n; ++i) {05 w=...;06 }07 08 //方案B09 for (int i = 0; i < n; ++i) {10 Widget w(...);11 }方案A:1次构造,1次析构,n次赋值方案B:n次构造,n次析构除非你知道(1)赋值成本小于构造+析构 (2)你正在处理代码中效率高度敏感的部分否则应该选择方案B条款27:尽量少做转型动作01 (T)expression //C风格02 T(expressi 阅读全文

posted @ 2011-07-08 20:55 李大嘴 阅读(423) 评论(0) 推荐(0) 编辑

摘要: 条款13: 以对象管理资源1.为防止资源泄漏,使用RAII对象,它们在构造函数中获得资源, 在析构函数中释放资源2.两个常用的RAII classes: tr1::shared_ptr和auto_ptr,后者复制会使被复制物指向nullRAII (Resource Acquisition is Initialization): 资源取得时机便是初始化时机------以对象管理资源。auto_ptr:不能让多个auto_ptr指向相同对象,否则对象会删除多次,未定义。 因此,若通过copy构造函数或copy assignment操作符复制它们,它们会变成Null, 而复制所得的指针将取得资源的唯 阅读全文

posted @ 2011-07-08 18:02 李大嘴 阅读(390) 评论(0) 推荐(0) 编辑

摘要: 条款01:视C++为一个语言联邦 : C, Object-Oriented C++, Template C++, STL条款02:尽量以const,enum,inline 替换#define:1.对于单纯常量,最好以const对象或enum替换#define2.对于形似函数的宏(macros),最好改用inline函数替换#define#define ASPECT_RATIO 1.653const double AspectRatio = 1.653; 1)用#define定义的名字可能没有进入记号表,编译出错,不方便追踪 2)用const定义常量将得到更精简的目标代码(object code 阅读全文

posted @ 2011-07-08 17:37 李大嘴 阅读(461) 评论(0) 推荐(0) 编辑

摘要: 笔者觉得这3个new有点意思,有时候我也被搞懵了,这些创造者难不成觉得C++过于简单,所以搞一点含糊的术语出来。这次总结一下,以便再懵的时候有个参考。有错的地方请不吝赐教,多谢先!简单点吧:1. new operator,即熟悉的new操作符,用它从堆中分配一个对象,并且初始化。CHeapObject* p=new CHeapObject(name);既然是操作符,那么它的行为就和其他+-*/操作符一样,是由C++语言定义的,不能改变,即使通过重载的方式也不能改变。C++规定了new操作符的行为:分配一个合适的空间容纳CHeapObject对象,然后调用其构造函数初始化对象。2. operat 阅读全文

posted @ 2011-07-08 10:36 李大嘴 阅读(221) 评论(0) 推荐(0) 编辑