more effective C++
1.不要對數組使用多態
??? 數組空間連續,靠偏移訪問,多態轉換后因為其類型變化,類型所占空間變化。此時偏移訪問的方式便不能正確去得數組各元素準確其實位置。
2.避免無用的缺省構造函數(主針對模板)
??? 通過仔細設計模板可以杜絕對缺省構造函數的需求。例如標準的vector模板(生成一個類似于可擴展數組的類)對它的類型參數沒有必須有缺省構造函數的要求。很多模板類沒有以仔細的態度去設計,沒有缺省構造函數的類就不能與許多模板兼容。
??? 無用缺省構造函數會在沒有足夠的數據時初始化一個對象,而此時該對象中許多屬性處于無效狀態。倘若我們不判斷這些無效狀態,則代碼很有可能運行不正常;倘若判斷無效狀態,則會影響運行的效率,這種對象的使用者也要為此付出更多時間和代碼。
??? 而使用沒有缺省構造函數的類的確有一些限制,但它給你提供了一種保證:這個類被正確地建立和高效地實現。
??? 避免方法是直接分配空間,而后在該空間以如下方式調用拷貝構造函數和析構函數。這樣子只提出了要求模板參數類有拷貝構造即可
??? ::new(__p) _Tp(__val)
??? __p->~_Tp()
3.智能指針
template<class T>??????????????????? // 模板類,指向T的
class SmartPtr {???????????????????? // 靈巧指針
public:
? SmartPtr(T* realPtr = 0);
? T* operator->() const;
? T& operator*() const;
? template<class newType>???????????? // 模板成員函數
? operator SmartPtr<newType>()??????? // 為了實現隱式類型轉換. 執行類似:
? {
??? return SmartPtr<newType>(pointee);
? }
? ...
};
實現模板類的不同類型實例間的隱式轉換。需要用到成員函數模板,即成員函數擁有一個未知類型模板參數。
SmartPtr<childclass> c;
SmartPtr<parentclass> p = c;
總結
以上是生活随笔為你收集整理的more effective C++的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下ftp服务阶段实验(3)
- 下一篇: Hive旺旺讨论(关于mapjoin)