이것은 너무 단순화되어 있지만 문제를 다시 만들 수 없습니다.stcast :: shared_ptr Upcasting segfault가 발생합니다
#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;
}
정적 검사로 오류가 발견되지 않고이 프로그램이 정상적으로 실행됩니다. 그러나 더 복잡한 프로그램에서 나는 nondebuggable segfault를 얻습니다. 나는
std::shared_ptr<Base> sharedObject = std::make_shared<Derived>();
에 대한
std::shared_ptr<Derived> sharedObject = std::make_shared<Derived>();
을 변경하려고하고 문제가 사라집니다.
여기에 "업 캐스팅"과 관련된 문제가 있다면 여기를 무시하거나 내 segfault가 다른 곳에서 왔는지 묻고 싶습니다. 그런 식으로 올바른 DTORS가있는 shared_ptr이
OTOH 범위를 벗어나 때 호출 될 사용자의 기본 클래스에 가상 소멸자를 정의하는 것입니다 할 수있는 일의
Upcasting * 할 수 없습니다 * 여기, 이후 문제가 될 당신은 "변경된"코드에서 정확히 그것을합니다 - 이전의 장소에서. – Xeo
가상 함수를 비우려고 했습니까? 기본 클래스의 가상 함수가 아닌 가상 함수를 호출 해 보았습니까? –
유형 계층 구조의 어딘가에서 여러 상속이 가능합니까? – bitmask