青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

CG@CPPBLOG

/*=========================================*/
隨筆 - 76, 文章 - 39, 評論 - 137, 引用 - 0
數據加載中……

《C++設計新思維》讀書筆記(二)

《C++設計新思維》讀書筆記(二)
 
1.5 Policies和Policy Classes

舉例,定義一個policy生成對象:Creator policy 提供一個Create函數,返回一個指向新生T類型對象的指針。

我們有三種做法:

 1 template<class T>
 2 struct OpNewCreator{
 3      static T* Create(){
 4           return New T;
 5      }
 6 };
 7 template <class T>
 8 struct MallocCreator{
 9      static T* Create(){
10            void* buf = std::malloc(sizeof(T));
11            if(!buf) return 0;
12            return new(buf) T;     //定位new表達式,見《C++ primer》8.4.5, cuigang
13       }
14 };
15 template <class T>
16 struct PrototypeCreator{
17       PrototypeCreator(T* pObj =0):pPrototype_(pObj){}
18       T* Create(){
19             return pPrototype_? pPrototype_->Clone():0;
20       }
21       T* GetPrototype(){ return pPrototype_;}
22       void SetPrototype(T* pObj){pPrototype_ = pObj;}
23 private:
24       T* pPrototype_;
25 };
26 

這些實作出來的policy稱為policy classes,這個東西并不意圖被單獨使用,它們主要用于繼承或被內含于其它classes。

一個類以復合或繼承的方式使用先前定義的三個classes之一,例如

1 //Library code
2 template <class CreationPolicy>
3 class WidgetManager : public CreationPolicy{};


如果class采用一個或多個policies,我們稱為hosts或host classes。

客戶端如此實例化:

1 //Application code
2 typedef WidgetManager< OpNewCreator<widget> > MywidgetMgr;


讓我們分析整個來龍去脈。無論何時,當一個MywidgetMgr對象需要產生一個widget對象時,它便調用它的policy子對象OpNewCreator<widget>所提供的Createv()。選擇“生成策略”(Creation policy)是WidgetManager使用者的權利。藉由這樣的設計,可以讓WidgetManager使用者自行裝配他所需要的機能。

這便是Policy-based class的設計主旨。
 
==============================
1 template <class T>
2 void* buf = std::malloc(sizeof(T));
3 void* buf =  (void*)new T;

當T為基類,具有派生類時,兩者申請的內存大小是不一致的,sizeof(T)不包括 virtual table 的大小。
——鐘遙
 
//////////////////////////////
鐘遙過慮了,以下代碼
 1 struct base{
 2         int x;
 3         base(){
 4                 std::cout<< "create a base."<<std::endl;
 5         }
 6         virtual void foo(){
 7                 std::cout<<"call base"<<std::endl;
 8         };
 9 };
10 struct test : public base{
11         int y;
12         test(){
13                 std::cout<< "create a test."<<std::endl;
14         }
15         virtual void foo(){
16                 std::cout<<"call test."<<std::endl;
17         }
18         void foo2(){};
19 };
20 /////////////////////////
21         int a = sizeof(test);
22         int b = sizeof(base);
23         std::cout<<"sizeof(test)="<< a << ""<<"sizeof(base)=" << b << endl;
24         base* pa = new base;
25         base* pb = new test;
26         std::cout<<"---------"<<endl;
27         base* ppa = (base*)malloc(sizeof(base));
28         base* ppb = (base*)malloc(sizeof(test));
29         std::cout<<"---------"<<endl;
30         new(ppa) base;
31         new(ppb) test;
32         pa->foo();
33         pb->foo();
34         ppa->foo();
35         ppb->foo();


輸出結果:
 1 sizeof(test)=12, sizeof(base)=8
 2 create a base.
 3 create a base.
 4 create a test.
 5 ---------
 6 ---------
 7 create a base.
 8 create a base.
 9 create a test.
10 call base
11 call test.
12 call base
13 call test.

 
 

posted on 2007-12-17 21:41 cuigang 閱讀(661) 評論(0)  編輯 收藏 引用 所屬分類: 《C++設計新思維》讀書筆記

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区 在线观看视| 国产毛片久久| 欧美日韩国产三级| 欧美激情精品久久久| 欧美日本中文| 亚洲一区二区三区欧美| 午夜激情亚洲| 美女免费视频一区| 亚洲国产精品一区二区三区| 亚洲精品在线免费| 亚洲天堂男人| 欧美国产第二页| 99精品欧美一区二区三区| 亚洲欧美在线免费观看| 老司机67194精品线观看| 欧美日本三级| 亚洲精品1区2区| 亚洲午夜电影| 欧美亚洲免费在线| 欧美日韩裸体免费视频| 1000部国产精品成人观看| 亚洲欧美日韩国产| 99国产精品久久久| 国产日韩精品一区二区| 一区二区国产精品| 欧美激情精品久久久久| 久久国产精品久久久久久| 欧美日韩在线免费视频| 99pao成人国产永久免费视频| 欧美国产三区| 国产精品欧美日韩| 亚洲一区二区成人| 久久久久久9999| 国产有码在线一区二区视频| 午夜精品999| 欧美成人国产| 亚洲国产另类久久精品| 亚洲一区国产精品| 欧美视频在线观看一区| 裸体歌舞表演一区二区| 欧美一级理论片| 一区二区欧美精品| 久久久五月婷婷| 午夜老司机精品| 欧美日本精品在线| 欧美不卡在线| 欧美成人精品一区二区| 久久久久久国产精品mv| 欧美一级片一区| 亚洲欧美视频一区二区三区| 欧美搞黄网站| 欧美激情麻豆| 1000部国产精品成人观看| 性欧美videos另类喷潮| 在线欧美日韩国产| 亚洲男人影院| 亚洲动漫精品| 一本色道久久加勒比88综合| 亚洲国产精品久久久久婷婷老年 | 在线看欧美日韩| 亚洲一区二区视频| 亚洲午夜av在线| 欧美揉bbbbb揉bbbbb| 亚洲国产精品www| 亚洲国产精品久久久久秋霞不卡 | 午夜精品一区二区三区电影天堂 | 亚洲亚洲精品在线观看| 国产视频在线观看一区二区| 欧美ed2k| 亚洲国产美女| 久久一本综合频道| 一区二区免费在线观看| 欧美精品一卡| 久久综合网络一区二区| 国产综合在线看| 久久久久久一区| 欧美成人免费在线| 亚洲精品日韩久久| 午夜亚洲视频| 蜜臀久久久99精品久久久久久| 狠狠色综合网| 99国产精品| 午夜一区不卡| 欧美国产乱视频| 亚洲日本aⅴ片在线观看香蕉| 国产精品v欧美精品v日韩| 久久亚洲精品中文字幕冲田杏梨| 欧美视频精品在线观看| 亚洲欧美久久久久一区二区三区| 久久av资源网| 国产精品播放| 欧美中文字幕在线视频| 亚洲一区影音先锋| 欧美电影免费观看| 亚洲精品国产精品乱码不99| 亚洲免费在线观看| 黄色国产精品| 欧美人与禽猛交乱配| 亚洲一区三区视频在线观看| 久久中文欧美| 亚洲尤物精选| 激情另类综合| 欧美综合国产精品久久丁香| 欧美国产日韩xxxxx| 亚洲自拍偷拍视频| 伊大人香蕉综合8在线视| 欧美在线日韩| 亚洲精品影院在线观看| 艳女tv在线观看国产一区| 欧美国产免费| 欧美在线观看网站| 日韩视频免费观看高清完整版| 亚洲人在线视频| 欧美激情国产日韩精品一区18| 午夜精品99久久免费| 欧美激情1区2区| 久久精品人人做人人综合 | 欧美色区777第一页| 欧美伊人久久久久久午夜久久久久| 亚洲国产成人tv| 亚洲欧洲在线一区| 国产九九精品| 欧美视频日韩视频| 欧美96在线丨欧| 亚洲日本电影| 欧美成人精品一区| 久久精品国产久精国产思思| 亚洲亚洲精品在线观看| 亚洲精品久久| 亚洲第一色在线| 国内精品久久国产| 国产精品露脸自拍| 欧美一区二区三区四区夜夜大片| 亚洲伦伦在线| 亚洲激情网站免费观看| 亚洲视频电影在线| 亚洲免费av片| 亚洲欧洲在线免费| 亚洲第一在线视频| 永久免费视频成人| 国产真实乱偷精品视频免| 国产精品丝袜xxxxxxx| 国产精品美女| 国产精品天美传媒入口| 国产伦精品免费视频| 国产精品成人一区| 久久三级福利| 欧美**人妖| 欧美激情综合在线| 欧美精品97| 欧美日本视频在线| 欧美视频福利| 国产色婷婷国产综合在线理论片a| 国产精品夜色7777狼人| 国产日韩欧美不卡| 国内精品久久久久影院优| 一区久久精品| 亚洲精品欧美在线| 亚洲一区二区欧美| 亚洲欧美日韩一区二区三区在线| 欧美一二三视频| 久久综合伊人| 亚洲国产精品黑人久久久 | 欧美一区成人| 一区二区日本视频| 亚洲在线观看视频| 久久精品国产成人| 免费成人av在线| 亚洲久久成人| 午夜精品视频在线观看一区二区| 久久久国产精品一区二区中文| 亚洲欧美自拍偷拍| 久久久久国产一区二区| 欧美精品1区2区| 国产精品丝袜白浆摸在线| 精品成人一区二区三区四区| 日韩一区二区久久| 小嫩嫩精品导航| 欧美成ee人免费视频| 一区二区三区日韩欧美精品| 久久福利影视| 欧美日韩在线精品一区二区三区| 国产九色精品成人porny| 亚洲黄色影院| 欧美在线网址| 91久久久国产精品| 午夜久久黄色| 欧美日韩国产综合在线| 国内成人精品视频| 亚洲视频图片小说| 媚黑女一区二区| 亚洲少妇一区| 亚洲免费小视频| 欧美激情一区二区三区| 国内精品福利| 欧美亚洲一区在线| 亚洲精品极品| 欧美成人精品在线播放| 国产一区二区三区高清在线观看| 国产一区二区剧情av在线|