P*******b 发帖数: 1001 | 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? |
y*c 发帖数: 904 | 2 没有data,是不是就一个virtual pointer的size, 4 bytes? |
P*******b 发帖数: 1001 | 3 virtual base的pointer呢?是不是没有data就不用了。
【在 y*c 的大作中提到】 : 没有data,是不是就一个virtual pointer的size, 4 bytes?
|
y*c 发帖数: 904 | 4
virtual pointer是跟object的吧,换一句话说,子类只需要一个virutal pointer,指
向它的virtual table,不需要父类的virutal pointer。
【在 P*******b 的大作中提到】 : virtual base的pointer呢?是不是没有data就不用了。
|
P*******b 发帖数: 1001 | 5 我说的应该是virtual base pointer,如果没有的话,父类的信息就没有了。
是不是没有data就不需要了呢?
【在 y*c 的大作中提到】 : : virtual pointer是跟object的吧,换一句话说,子类只需要一个virutal pointer,指 : 向它的virtual table,不需要父类的virutal pointer。
|
z****e 发帖数: 2024 | 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() {}
|