這是一個過分簡單化,但我不能重新創建問題。向上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