这是一个过度简化,但我无法重现这个问题。
#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
我在这里忽略的“向上转换”是否存在一些问题,或者我的段错误是否来自其他地方。