【发布时间】:2012-09-26 01:12:37
【问题描述】:
如下代码
class A
{
public:
~A()
{
std::cout << "a" << std::endl;
}
};
class B : public A {
public:
virtual ~B()
{
std::cout << "b" << std::endl;
}
};
int main()
{
B* b = new B();
A* a = b;
if (a == b)
{
}
delete a;
}
问题是,“a”是否等于“b”?这是为什么以及如何发生的? 指针的真正含义是什么?不只是地址和内存块的长度?
【问题讨论】:
-
是的,
a指向的地址将等于b指向的地址,除非涉及到多重继承。然后 C++ 就变得奇怪了…… -
b指向的对象是B,但也是A。所以指向A对象的指针可以指向b,因为*b是A -
您的代码有未定义的行为。您正在通过基类
A *删除B对象,但A的析构函数不是virtual