熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2022-06-13   來源: Java核心技術 

  只要在源類中的子對象沒有任何虛擬成員函數或者非靜止數據成員那麼空base類的優化就不會為它分配任何存儲空間在這個小技巧中我將會告訴大家一些空類的應用和性能的分支
  
  看看下面的類
  
  class Base {};
  
  這個類中沒有任何直接或者間接的虛擬成員函數或者自定義的數據成員這樣一個類中的對象不必占用任何存儲空間但是如果你使用一個sizeof()表達式你將可以發現它至少占用了個字節(實際大小取決於你運行的配置)
  
  int n=sizeof(Base); //n 最小必須是
  
  此時你可能會認為存儲空間被浪費了但是當你處理的對象是一組數組的時候這個存儲空間的使用是必要的
  
  Base bases[]; //占用最少個字節
  
  這樣做有一個很好的理由允許全部的對象只有字節將意味著base可能存儲在同一個內存地址實際上這樣做就會使這些對象中的數組變成無用的因為它沒有任何方法存取獨立構件
  
  空類的優化
  C++允許優化類的存儲空間這些類都是從空base類中繼承而來比如源類中的子對象可能有個字節
  
  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 & );//更快的備份通常使用在特別的例子中
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25563.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.