为什么d
实例具有不同的this
地址?有人告诉我,在OOP语言中,派生类只是基类的所有成员,其后是其自身的成员。
#include <iostream>
#include <memory>
struct A
{
int member;
};
struct B : public virtual A
{
void print_b() { std::cout << static_cast<void*>(this) << " " << static_cast<void*>(&this->member) << std::endl; }
};
struct C : public virtual A
{
void print_c() { std::cout << static_cast<void*>(this) << " " << static_cast<void*>(std::addressof(member)) << std::endl; }
};
struct D : public B, public C
{
void print()
{
print_b();
print_c();
}
};
int main()
{
D d;
d.print();
}
0x700af9347b90 0x700af9347ba0
0x700af9347b98 0x700af9347ba0
答案 0 :(得分:4)
由于B
和C
基本子对象是彼此相对的对象,因此不能共享地址。
Empty 基础子对象具有唯一地址的要求,但是B
和C
不为空。