avatar
C++ object size一问# JobHunting - 待字闺中
P*b
1
class Grandpa {
public:
Grandpa() { cout << "Grandpa " << endl; }
virtual ~Grandpa() {}
};
class Ma : public virtual Grandpa {
public:
Ma() { cout << "Ma" << endl; }
virtual ~Ma() {}
virtual void print() {}
};
为啥这里Ma的object size 等于grandpa的object size?
avatar
y*c
2
没有data,是不是就一个virtual pointer的size, 4 bytes?
avatar
P*b
3
virtual base的pointer呢?是不是没有data就不用了。

【在 y*c 的大作中提到】
: 没有data,是不是就一个virtual pointer的size, 4 bytes?
avatar
y*c
4

virtual pointer是跟object的吧,换一句话说,子类只需要一个virutal pointer,指
向它的virtual table,不需要父类的virutal pointer。

【在 P*******b 的大作中提到】
: virtual base的pointer呢?是不是没有data就不用了。
avatar
P*b
5
我说的应该是virtual base pointer,如果没有的话,父类的信息就没有了。
是不是没有data就不需要了呢?

【在 y*c 的大作中提到】
:
: virtual pointer是跟object的吧,换一句话说,子类只需要一个virutal pointer,指
: 向它的virtual table,不需要父类的virutal pointer。

avatar
z*e
6
virtual inheritance implementation is compiler dependent. no universal
single answer. you might want to take a look at MS thunk technique to see
how does VS implement this. alignment is also an issue. so for virtual
inheritance, do not spend unnecessary time to dig.

【在 P*******b 的大作中提到】
: class Grandpa {
: public:
: Grandpa() { cout << "Grandpa " << endl; }
: virtual ~Grandpa() {}
: };
: class Ma : public virtual Grandpa {
: public:
: Ma() { cout << "Ma" << endl; }
: virtual ~Ma() {}
: virtual void print() {}

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。