【发布时间】:2010-01-28 18:58:52
【问题描述】:
我正在编写一些涉及从基本引用计数指针类继承的代码;并且出现了一些复杂的 C++。我已将其减少如下:
假设我有:
class A{};
class B{};
class C: public A, public B {};
C c;
C* pc = &c;
B* pb = &c;
A* pa = &c;
// does pa point to a valid A object?
// does pb point to a valid B object?
// does pa == pb ?
此外,确实:
// pc == (C*) pa ?
// pc == (C*) pb ?
谢谢!
【问题讨论】:
-
你说的 == 是什么意思?显然,地址是一样的。
-
地址不一定相同。
-
在我见过的多重继承(虚拟)的一种实现中,在派生类对象的基地址中添加了一些偏移量,以访问 B 的属性和方法。但这对用户来说是不可见的因为编译器在内部对其进行操作。因此在你的程序中你可能仍然会看到 A、B 和 C 的地址是相同的。
-
@hype:这里的关键词是“可能”。
-
@Dave Bacher 这并非总是如此。不久前,我个人在尝试取消引用指向对象的指针时遇到了段错误,但指针的类型与函数预期的类型不同。但是,对象继承自这两种类型。它可能有效,但并不安全。