国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

探索空類的應用和性能分支

2019-11-18 12:07:16
字體:
來源:轉載
供稿:網友

  只要在源類中的子對象沒有任何虛擬成員函數或者非靜止數據成員,那么空base類的優化就不會為它分配任何存儲空間。在這個小技巧中,我將會告訴大家一些空類的應用和性能的分支。
  
  看看下面的類:
  
  class Base {};
  
  這個類中沒有任何直接或者間接的虛擬成員函數或者自定義的數據成員。這樣一個類中的對象不必占用任何存儲空間;但是,假如你使用一個sizeof()表達式,你將可以發現它至少占用了1個字節(實際大小取決于你運行的配置):
  
  int n=sizeof(Base); //n 最小必須是1
  
  此時你可能會認為存儲空間被浪費了。但是,當你處理的對象是一組數組的時候,這個存儲空間的使用是必要的:
  
  Base bases[1000000]; //占用最少100000個字節
  
  這樣做有一個很好的理由。答應全部的對象只有0字節將意味著base可能存儲在同一個內存地址。實際上,這樣做就會使這些對象中的數組變成無用的,因為它沒有任何方法存取獨立構件。
  
  空類的優化
  C++答應優化類的存儲空間,這些類都是從空base類中繼續而來。比如,源類中的子對象可能有0個字節:
  
  class Derived : public Base{}; //沒有存儲空間分配給Base
  
  對空類實行強迫方針
  空類也可以在標準的模版庫中使用。程序首部定義了非凡的Operator new,假如程序運行失敗,它不會丟掉異常的數據。
  
  void * operator new (size_t size, const std::nothrow_t &);
  
  std::nothrow_t是一個空類,按照下面的方式定義它:
  
  namespace std
  {
   strUCt nothrow_t {};//empty
  }
  
  nothrow_t是一個強制執行的政策,也就是創造一個獨特的重載placement new,它可以不必被丟掉。
  
  你也可以使用空類在代碼中實行強迫執行政策,比如:
  
  struct no_log {};
  
  int backup(); //默認備份例程
  
  int backup(const no_log & );//更快的備份,通常使用在非凡的例子中

上一篇:再談面向對象

下一篇:也談面向對象

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双江| 建湖县| 云霄县| 封丘县| 汝城县| 新宁县| 阿鲁科尔沁旗| 岳普湖县| 玉田县| 临高县| 堆龙德庆县| 孟村| 枣强县| 石楼县| 肃宁县| 北宁市| 师宗县| 益阳市| 迁安市| 涟水县| 阿荣旗| 长子县| 醴陵市| 武邑县| 奈曼旗| 南宫市| 那曲县| 托克逊县| 大名县| 边坝县| 腾冲县| 阳新县| 民和| 浠水县| 新乡市| 霍林郭勒市| 任丘市| 偃师市| 秭归县| 佛山市| 油尖旺区|