Posted on 2008-11-05 23:59
Batiliu 閱讀(574)
評論(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();
第二十四條 常量
第二十五條 內聯