EBO, empty base optimization, 即空白基類最優化, 可以使派生類節省空間;
但是如果使用復合(composition)的方式, 因為定義了新對象, 所以編譯器會進行填充(padding), 填充進一個int, 4位的空間;
代碼:
/*************************************************
File: test.cpp
Copyright: C.L.Wang
Author: C.L.Wang
Date: 2014-04-11
Description: test
Email: morndragon@126.com
**************************************************/
/*eclipse cdt, gcc 4.8.1*/
#include <iostream>
using namespace std;
class Empty {};
class HoldsAnInt {
private:
int x;
Empty e;
};
class HoldsAnIntP : private Empty {
private:
int x;
};
int main () {
std::cout << "Int : " << sizeof(int) << std::endl;
std::cout << "HoldsAnInt(class) : " << sizeof(HoldsAnInt) << std::endl;
std::cout << "HoldsAnIntP(inheritance) : " << sizeof(HoldsAnIntP) << std::endl;
return 0;
}
輸出:
Int : 4 HoldsAnInt(class) : 8 HoldsAnIntP(inheritance) : 4
作者:csdn博客 Spike_King