原创 string的sso實現

sso的全稱是Small String Optimization,小字符串優化。struct _Alloc_hider : allocator_type // TODO check __is_final { _Alloc_h

原创 shared_ptr的拷貝構造函數

假設shared_ptr的模板參數爲T,它的一個構造函數爲:template< class Y > explicit shared_ptr( Y* ptr );其中T可以等於Y,也可以不等於Y。那麼對於它的拷貝構造函數:shared_pt

原创 :allocator

<memory>中的allocator作爲STL中默認的內存分配器,它的定義如下:template<typename _Tp> class allocator: public __allocator_base<_Tp>{ public:

原创 C++11 std::thread::id

C++11 std::thread::id其實是一個內部類:class thread{ ...     class id{         ...     }; ... };id裏面有一個私有的類似typedef unsigned lon

原创 windows下的signal(),pthread_cancel()

windows下的signal()只支持有限的信號:// Signal types #define SIGINT 2 // interrupt #define SIGILL

原创 02小對象工具

如果需要保證類型T包含一個名爲value的常量或名爲type的類型,可以這樣寫:template <typename T> void myfunc() { typedef typename T::type ERROR_T_DOES_NOT

原创 03靜態編程

當類模板產生實例時,編譯器生成:1.每個成員在類級別的簽名2.所有靜態常量和typedef3.嚴格需要的函數體當需要同樣的實例的時候,通過查找來找到。例如:template <size_t N> struct sum_of_integer

原创 iterator

迭代器首先要看的是一些空類: struct input_iterator_tag { }; struct output_iterator_tag { }; struct forward_iterator_tag : public

原创 <memory>:allocator

<memory>中的allocator作爲STL中默認的內存分配器,它的定義如下:template<typename _Tp> class allocator: public __allocator_base<_Tp>{ public:

原创 01 模板

編譯時常量語語法是static const [[integer type]]name=value編譯時常量可以是:1.整型字面值,如27,0x052.sizeof和具有整型結果的非標準語言運算符,如__alignof__3.非類型模板參數

原创 <exception>

<exception>中定義的exception類很簡單:class exception{ public:     exception()noexcept{}     virtual ~exception()noexcept{}     

原创 crypt函數

getspnam函數可以根據用戶名返回對應shadow文件中的信息,函數原型爲struct spwd *getspnam(char *name);,頭文件爲shadow.h。返回的信息存儲在spwd結構中,struct spwd { ch

原创 01關於對象

在C語言中,數據和操作是分開聲明的。C++將數據和操作封裝在一起。C++的數據成員包含在類對象中,成員函數不包含在類對象中。非內聯函數只產生一個函數實例,內聯函數在每一個調用處展開。C++封裝數據和操作帶來的開銷主要由虛函數機制和虛基類函