本文介紹了程序員什么時候使用空基優化(EBO)的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在閱讀有關空基優化 (EBO) 的內容.在閱讀的過程中,我的腦海中浮現出以下問題:
當它對派生類沒有任何貢獻(無論是功能方面還是數據方面)時,使用 Empty 類作為基類有什么意義?
在 這篇文章,我讀了這個:
<塊引用>
//S為空
類結構 T : S
{
int x;
};
[...]
請注意,我們沒有丟失任何數據或代碼準確性:當您創建一個S 類型的獨立對象,對象的大小仍然是 1(或更多)作為前;僅當 S 用作基數時另一個類的類做它的記憶足跡縮小到零.意識到這種節省的影響,想象一下包含 125,000 個的向量對象.僅 EBO 就可節省一半兆字節內存!
這是否意味著如果我們不使用S"作為T"的基類,我們必然會消耗兩倍的內存嗎?我認為,這篇文章比較了兩種我認為不正確的不同場景.
我想知道當 EBO 被證明有用時的真實場景.(意思是,在同一場景中,如果我們不使用 EBO,我們必然會不知所措!).
請注意,如果您的回答包含這樣的解釋:
重點是一個空類的大小不為零,但是在派生或派生時它的大小可以為零,那么我不是問這個,因為我已經知道了.我的問題是,首先為什么有人會從一個空類派生他的類?即使他不派生并簡單地編寫他的類(沒有任何空基),他是否有任何損失?
解決方案
EBO 在 基于策略的設計,您通常私下從多個策略類繼承.如果我們以線程安全策略為例,可以想象偽代碼:
class MTSafePolicy{民眾:void lock() { mutex_.lock();}void unlock() { mutex_.unlock();}私人的:互斥互斥_;};類 MTUnsafePolicy{民眾:void lock() {/* 無操作 *
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!