继承空类时大小(为什么多继承不优化了呢)?
今儿effective C++看到一点:
空白基类最优化:但一般只在单继承中才可运行。为什么呢?
class A
{
};
class B
{
};
class D
{
};
class E
{
};
class F
{
};
//class C:public A,public B,public D,public E,public F
//{
////大小为4
//};
class C:public A,public B
{
//大小1
};
int main()
{
cout<<sizeof(C)<<endl;
return 0;
}
实现了下,但有疑问。内存到底是怎么分配这些空类的??(书上说:通常C++默默安插一个char到空对象内)?
那么,既然当成char对待,为什么第一个可以忽略,后面的确不能忽略呢?
C++ 继承 类 性能优化
[解决办法]
多继承的情况下,为了区分各个不同的基类子对象,这些基类子对象必须具有不同的地址,所以这时候不能使用空基类优化,但单继承就可以,因为对于单继承,基类子对象与最终派生类对象地址相同的情形是允许的。
同时要注意,空基类优化只能存在于基类子对象,当空类对象作为完整对象时,是不能优化的,因为C++规定,每个完整对象都必须具有唯一的地址。空类完整对象的大小并不是只能为1,而是至少为1,有些编译器会加入内存对齐的因素,所以有些编译器的空类完整对象的大小会是4或者8等等。