关于C++中具有多重继承"this"指针的说明
Clarification on "this" pointer with multiple inheritance in C++
对于"this"指针如何与基类和派生类一起工作,我有点困惑。考虑这个代码:
class A {
//some code
};
class B: public A {
//some code
};
假设从类B调用的"this"指针将指向与从基类a中的某些代码调用的"this"指针相同的地址,这正确吗?
多重继承呢?
class A {
//some code
};
class B {
//some code
};
class C: public A, public B {
//some code
};
假设从类C调用的"this"指针将指向与从基类a或B中的某些代码调用的"this"指针相同的地址,这正确吗?
假设从类B调用的"this"指针将指向与从基类a中的某些代码调用的"this"指针相同的地址,这正确吗?
不,你不能这么认为。然而,尽管不是必需的,但许多实现将使用相同的地址(用clang 11
和gcc 10
测试(。
对于多重继承,在您的示例中,clang 11
和gcc 10
对class C
的实例及其基A
使用相同的地址。基础B
将具有另一个地址。
另一个例子是具有公共基础实例的多重继承:
struct A {};
struct B : virtual A {};
struct C : virtual A {};
struct D : B, C {};
将D
实例化,得到gcc 10
和clang 11
:
D: 0x7ffc164eefd0
B: 0x7ffc164eefd0 and A: 0x7ffc164eefd0 // address of A and B = address of D
C: 0x7ffc164eefd8 and A: 0x7ffc164eefd0 // different address for C
没有规则指定派生类和基类实例的地址之间的关系。这取决于实现。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 关于C++中具有多重继承"this"指针的说明
- Doees the 'this' 指针参与虚函数的多态行为
- 为什么成员函数内的"this"指针为空?
- "this"指针的值在对象的生存期内是否恒定?
- 如何将'this'指针传递给C++ WinAPI 线程?
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 'this'指针是否可以在 c++ 标头声明中使用?
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 为什么直接传递"this"指针来存档是一个错误,而另一个相同类型的指针是可以的?
- C++虚拟方法,不需要"this"指针 - 优化
- 指向成员函数签名的指针中缺少"this"指针
- 是否可以获取'this'指针的地址?
- 静态类成员不是与 this 指针没有关联吗?
- 为什么有必要将"this"指针作为"arg"参数传递给pthread_create
- 编译错误:2 个重载没有'this'指针的合法转换。使用结构
- 对象的"this"指针是否等于指向其(单个)基类的指针?
- Do=在lambda的捕获列表中捕获this指针
- 将"this"指针传递给析构函数中的其他类/函数