C++中对象大小的问题

来源:互联网 发布:广州php培训 编辑:程序博客网 时间:2024/05/22 17:49

总结:

  1) 类的所有对象都指向一个虚函数表, 也就是说虚函数表是由类来维护的, 在编译的时候就已经确定了

  2) 对象的大小,

     2.1) 当类中没有虚函数时,并没有一个指针指向虚函数表, 只有当有虚函数的时候才有指针。

    2.2) 当类中有静态变量时, 对象的大小不会因为静态变量的而改变, 静态变量并不在对象中

    2.3) 对象中只会有非静态的成员变量, 包括本身的和父类的

    2.4)内存对齐的问题

例子:

class test{
};
class Base1{
public:
    Base1(){};
    ~Base1(){};
    static int test1;
    int test2;
    virtual void testfunc2(){};

};
class Base2{
public:
    static int test1;
    int test2;
    virtual void testfunc2(){};

};

class Derive1:public Base1{
public:
    int test;
    virtual void s() {};
};
class multiDerive: public Base1, Base2{

};


int _tmain(int argc, _TCHAR* argv[])
{
    test a;
    Base1 obj;
    Derive1 der;
    multiDerive multiobj;
    std::cout<< sizeof(a) <<std::endl;
    std::cout<< sizeof(obj) <<std::endl;
    std::cout<< sizeof(der) <<std::endl;
    std::cout<< sizeof(multiobj) <<std::endl;

}

输出:(64位环境)

1

16

24

32 //多重继承



虚多重继承: