这是一个过分简单化,但我不能重新创建问题。向上std :: shared_ptr导致段错误
#include <memory>
class Base
{
};
class Derived : public Base
{
};
void doSomethingPolymorphical(std::shared_ptr<Base> basePointer)
{
}
int main(int argc, char** argv)
{
std::shared_ptr<Derived> sharedObject = std::make_shared<Derived>();
doSomethingPolymorphical(sharedObject);
return 0;
}
静态检查发现没有错误,此程序执行正常。但在一个更复杂的程序中,我得到了不可分割的段错误。我试图改变
std::shared_ptr<Derived> sharedObject = std::make_shared<Derived>();
为
std::shared_ptr<Base> sharedObject = std::make_shared<Derived>();
和问题消失。
我想问一下,如果在上传“shared_ptr
”时存在一些问题,或者我的segfaults来自其他地方。
上溯造型*不能*是这里的问题,因为你也可以在“更改”的代码中做到这一点 - 只是在更早的地方。 – Xeo
您是否尝试清空虚拟功能?你有没有试过从基类中的非虚函数调用虚函数? –
是否有可能在类型层次结构中有多个继承? – bitmask