先引出问题,看一段代码:
#include <iostream> using namespace std; class A { }; class B { public: B() {} ~B() {} }; class C { public: C() {} ~C() {} void foo() {} }
class D {
public:
D() {}
virtual void foo() {}
};
class E : public D{
public:
virtual void foo() {}
}; int main() { A a; cout << sizeof(a) << endl; B b; cout << sizeof(b) << endl; C c; cout << sizeof(c) << endl;
D d;
cout << sizeof(d) << endl;
E e;
D *pd = &e;
}
这样的三个类的结果都是:1,由此我写出我的几个问题:
(1)对于类A来说,整个类是空的,也就是说不会占用内存,所以sizeof(A)应该是0,但是为什么结果是1?
(2)对于类A和类B来说,在类B里面我们添加了构造函数和析构函数,为什么结果仍然是1呢?
(3)C++对象模型是什么以及如何在内存里布局呢?
(4)对于类D来说,为什么加入一个虚函数foo()结果就是8了呢(x86_64)?
(5)对于类E来说,为什么通过pd->foo()就能调到E的foo()呢?
对于这4个问题,我觉得他们其实就是跟C++模型有关系?
还没写完先保存一下