class Base
{
bool a;
};
class Derived : public Base
{
bool b;
};
void main()
{
std::shared_ptr<Base> base(new Derived());
}
所以在这个例子中,shared_ptr的原始指针将指向Base,NOT Derived的一个实例。我不明白。std :: shared_ptr的原始指针返回基地而不是派生的
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?我确定我错过了一些东西。有人可以向我解释为什么会发生这种情况吗?
指针在这两种情况下指向“派生”实例。在这方面,共享指针与原始指针没有区别。 – 2014-10-01 10:48:05
你如何确定它指向调试器?如果基类没有至少一个虚函数,则某些信息不会嵌入类中以确定其类型,并且调试器可能无法推断其派生类型。 – 2014-10-01 10:49:27
@NeilKirk即使类是多态的,我使用的调试器也不能推导出类型。(但是,当然,如果'Base'不是多态的,调试器就不可能知道它实际上是一个Derived'。 – 2014-10-01 13:46:56