STL原始碼剖析 POD型別

2021-09-18 03:28:43 字數 1560 閱讀 2164

轉並改自

啥是pod型別?

pod全稱plain old data。通俗的講,乙個類或結構體通過二進位制拷貝後還能保持其資料不變,那麼它就是乙個pod型別。

平凡的定義

1.有平凡的建構函式

2.有平凡的拷貝建構函式

3.有平凡的移動建構函式

4.有平凡的拷貝賦值運算子

5.有平凡的移動賦值運算子

6.有平凡的析構函式

7.不能包含虛函式

8.不能包含虛基類

#include

#include

#include

using namespace std;  

class a };  

class b };  

class c };  

class d };  

class e };  

class f };  

class g ;  

class h : g {};  

class i {};  

int main(int argc, _tchar* ar**)  

執行結果

標準布局的定義

1.所有非靜態成員有相同的訪問許可權

2.繼承樹中最多只能有乙個類有非靜態資料成員

3.子類的第乙個非靜態成員不可以是基類型別

4.沒有虛函式

5.沒有虛基類

6.所有非靜態成員都符合標準布局型別

#include

#include

#include

#include

#include

using namespace std;  

class a   

;  class b1  

;  class b2  

;  class b : b1, b2  

;  class c1 {};  

class c : c1  

;  class d ;  

class e : d {};  

class f ;  

int _tmain(int argc, _tchar* ar**)  

執行結果

pod的使用

當乙個資料型別滿足了」平凡的定義「和」標準布局「,我們則認為它是乙個pod資料。可以通過std::is_pod來判斷乙個型別是否為pod型別。

如文章開頭說的,乙個pod型別是可以進行二進位制拷貝的,看看下面的例子。

[cpp] view plaincopy在code上檢視**片派生到我的**片

#include "stdafx.h"  

#include

#include

using namespace std;  

class a   

;  int _tmain(int argc, _tchar* ar**)  

system("pause");  

return 0;  

}  執行結果

可以看到,對乙個pod型別進行二進位制拷貝後,資料都成功的遷移過來了。

STL原始碼剖析

這兩天略讀完了 stl原始碼剖析 之所以是略讀,就是只看大體,不講具現 這個詞在 深度探析c 物件模型 中比較多 已經看過好幾本c 的書了,感覺c 本身設計的博大精深,而c 編譯器就更是乙個神奇的東西,換句話說,你永遠不知道c 編譯器揹著你做了哪些出乎你意料的事 不扯遠了 我主要是想看stl容器的具...

STL原始碼剖析

這兩天略讀完了 stl原始碼剖析 之所以是略讀,就是只看大體,不講具現 這個詞在 深度探析c 物件模型 中比較多 已經看過好幾本c 的書了,感覺c 本身設計的博大精深,而c 編譯器就更是乙個神奇的東西,換句話說,你永遠不知道c 編譯器揹著你做了哪些出乎你意料的事 不扯遠了 我主要是想看stl容器的具...

STL原始碼剖析

花了兩天時間略讀了一下 stl原始碼分析 看了個大體,對於細節並沒有深究。之所以想翻翻這本書,主要是想看看stl中的特性 介面卡的具體實現。看完之後收穫還是蠻大的,模板的各種組合讓我眼前一亮,下面大概總結一些內容。1.記憶體分配 sgi記憶體分配採用兩級實現,對於大記憶體塊的申請 大於128k 由第...