原创 VS2013 tuple 源碼分析
tuple這玩意實現方法就是遞歸方式展開函數包的完美示例。相關文章可以查看<深入應用C++11>3.2.1.1章節。 tuple的實現思想可以查看侯捷老師視頻:https://www.bilibili.com/video/BV1p4411
原创 MFC線程獨立對象管理機制分析
可以參考這篇博文https://blog.csdn.net/likePeak/article/details/3595982 #define EXTERN_THREAD_LOCAL(class_name, ident_name) \
原创 MFC 消息機制函數映射表
#define DECLARE_MESSAGE_MAP() \ protected: \ static const AFX_MSGMAP* PASCAL GetThisMessageMap(); \ virtual const AF
原创 VS 2010 STL stack與queue源碼分析
stack是棧,先進後出,只能一頭操作;queue是隊列,先進先出,一頭進,另一頭出。VS裏的stack與queue底層都是使用雙端隊列deque實現的。通過改變deque的行爲而生成不同的容器,這就做容器適配器。 stack //
原创 VS 2010 STL deque源碼分析
定義 deque 即雙端隊列,與vector相比,此容器多出了pop_front()和push_front()這兩個操作,即在首部的增刪操作;而與list相比,deque多出了對容器元素的隨機訪問功能。 寫在文章之前 網上也有很多關於de
原创 C語言難點總結
1,*與++結合 char str[20]="123456789"; char* p =str; char c1 = *p++; //c1爲字符 1 *p++解析: *與++運算符 優先級同級,此優先級 結合方向 從右到左 。 所以先
原创 VS 2010 shared_ptr 源碼分析
類結構框架 下面這張圖來自於網絡,已不知原作者。這張圖表明瞭shared_ptr類結構圖 _Ref_count_base是在shared_ptr創建的時候new出來的。_Ref_count_base有3個子類,分別對應shared_pt
原创 C++類型轉換 const_cast static_cast dynamic_cast reinterpret_cast
C風格的強制類型轉換(Type Cast)很簡單,不管什麼類型的轉換統統是:TYPE b = (TYPE)a。C++風格的類型轉換提供了4種類型轉換操作符來應對不同場合的應用。 const_cast,字面上理解就是去const屬性。sta
原创 VS 2010 STL vector源碼分析
類結構框架 vector繼承於_Vector_val,繼承於_Container_base,_Container_base在debug模式下(只探索debug模式)就是如此定義:typedef _Container_base12 _Con
原创 VS 2010 CRT ::operator new源碼分析
從我們寫代碼說起 C++面試常見的一個問題是:new與malloc的區別,然後你去網上搜索這個問題,常見回答如下: malloc : 只能單獨給對象申請空間,不能進行構造函數的調用 new : 不僅能申請動態空間,還能調用構造函數進行對
原创 VS 2010 STL list源碼分析
類結構框架(debug模式) // TEMPLATE CLASS _List_nod template<class _Ty, class _Alloc> class _List_nod : public _Container
原创 VS 2010 STL 內存分配器
Alloc是分配內存之意,Construct是在內存裏構造之意。就好C++裏的new有分配內存,在分配的內存裏構造我們的對象這兩層作用。 其實這也就是分配器的作用。替換new與delete。 // TEMPLATE FUNCTION _
原创 VS 2010 auto_ptr
下面這段描述來自http://www.cplusplus.com/reference/memory/auto_ptr/ Note: This class template is deprecated as of C++11. uniqu
原创 Qt 信號與槽機制
下部分代碼來自於https://blog.csdn.net/l09711/article/details/7451140,我自己添加了傳遞參數的部分 //MyObject.h #ifndef MY_OBJECT #define MY_
原创 VS2010 std::string 源碼分析
分配內存原理分配內存原理 union _Bxty { // storage for small buffer or pointer to larger one _Elem _Buf[_BUF_SIZE]; _Elem *_Ptr;