Posted on 2008-11-05 23:59
Batiliu 阅读(561)
评论(0) 编辑 收藏 引用 所属分类:
读书笔记
第十四条 对象初始化顺序
当创建一个类类型的C++对象时,其初始化顺序是?
下面这组规则是递归描述的:
- 最上层派生类的构造函数负责调用虚基类子对象的构造函数。所有虚基类子对象会按照深度优先、从左到右的顺序进行初始化。
- 直接基类子对象按照它们在类定义中声明的顺序被一一构造起来。
- (非静态)成员子对象按照它们在类定义体中声明的顺序被一一构造起来。
- 最上层派生类的构造函数体被执行。
第十五条 访问权限
第十六条 私有
- private成员的名字只对其所属类的其他成员或友元来说是可访问的,而这里的其他成员也包括成员模板的任何显示特化。不过如果某段代码具有对某个成员的访问权,该段代码就可以通过泄漏该成员的指针方式将其访问权限授予外界的任何代码。
- private成员对于任何能够看到其所属类定义的代码来说都是可见的。这意味着它的函数参数的类型必须事先声明,另外它还会参与名字查找和重载决议,因而可能会使调用变得无效或具有二义性。
第十七条 封装
第十八条 虚拟
第十九条 对派生类施加规则
为了阻止编译器为派生类隐式生成默认构造函数、复制构造函数或者复制复制操作符,最简单的、最佳的选择是将基类中相应的函数“藏”在非公用区段(或者干脆让它消失,例如默认构造函数)。
第二十条 第二十一条 内存中的容器
内存管理的层次:
每种容器都会选择不同的空间/性能平衡点。效率方面,使用vector和set可以做到O(logN)时间复杂度的搜索;使用vector做到随机的元素访问;使用list来高效地地插入元素等等。
第二十二条 第二十三条 new操作
C++标准中提供了哪三种形式的new?
// 标准提供的operator new重载
// 最常用的简单new,用法:new T
void* ::operator new(std::size_t size) throw(std::bad_alloc);
// nothrow new,用法:new (std::nothrow) T
void* ::operator new(std::size_t size, const std::nothrow_t&) throw();
// 定位new,用法:new (ptr) T
void* ::operator new(std::size_t size, void* ptr) throw();
第二十四条 常量
第二十五条 内联