これは単純化しすぎていますが、問題を再現することはできません。
#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
ここで無視している「アップキャスト」に問題があるかどうか、またはセグメンテーション違反が他の場所から発生したかどうかを尋ねたいと思いました。