【发布时间】:2014-10-01 10:42:54
【问题描述】:
class Base
{
bool a;
};
class Derived : public Base
{
bool b;
};
void main()
{
std::shared_ptr<Base> base(new Derived());
}
所以在本例中,shared_ptr 的原始指针将指向 Base 的一个实例,而不是 Derived。我不明白。
class Base
{
virtual void foo() {}
bool a;
};
class Derived : public Base
{
virtual void foo() {}
bool b;
};
void main()
{
std::shared_ptr<Base> base(new Derived());
}
但在这种情况下,shared_ptr 的原始指针确实指向 Derived?我确定我错过了一些东西。有人可以向我解释为什么会这样吗?
【问题讨论】:
-
在这两种情况下,指针都指向
Derived实例。在这方面,共享指针与原始指针没有什么不同。 -
调试器你如何确定它指向什么?如果基类没有至少一个虚函数,则类中没有嵌入某些信息来确定其类型,调试器可能无法推断其派生类型。
-
@NeilKirk 我使用的调试器经常无法推断出类型,即使类是多态的。 (当然,如果
Base不是多态的,调试器就没有机会知道它实际上是Derived。) -
@JamesKanze VS 调试器通常可以从多态基础中分辨出来。
-
@NeilKirk 这不是我的经验。它只显示基类数据(通常为空,因为基类是一个接口)。我可以得到最派生类的 name,因为它被修改为 vtable 的名称,但仅此而已。)
标签: c++ shared-ptr