我无法理解以下示例中 this
的值:
struct A {
int i;
void bar() {
cout << this << endl;
}
};
struct B : public A {
virtual void foo() = 0;
};
struct C : public B {
void foo() {
printf("hello world!\n");
}
};
int main (int argc, const char* argv[]) {
C* c = new C;
cout << c << endl;
c->bar();
return 0;
}
两次我打印指向控制台的指针,我得到不同的值。我希望它是相同的,因为它们两次都引用同一个实例?!
如果我删除A
中的虚函数或int i
,它就会消失。为什么?
最佳答案
但它指的是不同的事物。
void bar() {
cout << this << endl;
}
这里this
有一个类型A*
。它指向对象的A
部分。
out << c << endl;
这里c
是一个C*
并指向对象的C
部分。
如果A
对象与C
对象完全对齐,则指针是相同的。如果它们不一样(比如当 C 包含其他成员(指向 vtable 的隐藏指针),因此“A”部分从较大对象的开头偏移),则指针不一定相同。
关于c++ - 'this' 与继承的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7827414/