我在一個函式中創建 shared_ptr 并從該函式回傳原始指標。要從 shared_ptr 獲取底層原始指標,我正在使用 .get()
如果我在函式中使用原始指標并分配給原始指標型別的函式,它可以正常作業。但是,如果我創建 shared_ptr 并在回傳時,它正在呼叫解構式并洗掉分配給物件的記憶體并崩潰。
如何將 shared_ptr 物件分配給原始指標型別的函式?
CMyClass::CMyClass()
{
}
CMyClass::~CMyClass()
{
}
CMyClass* CreateClassInstance()
{
std::shared_ptr<CMyClass> l_MyClassInterface = std::make_shared<CMyClass>();
return l_MyClassInterface.get();
}
CMyClass* CreateClassInstance()
{
CMyClass* l_MyClassInterface = new CMyClass();
return l_MyClassInterface;
}
auto l_pMyClassInterface = CreateClassInstance();
uj5u.com熱心網友回復:
是的,@user17732522 所說的。
在撰寫的代碼中,l_MyClassInterface當您的第一個版本回傳時超出范圍CreateClassInstance,并帶走了您新創建的物件。當您回傳 ashared_ptr時,與回傳的指標相反get(),它用于跟蹤物件的參考計數的機制會啟動并阻止這種情況發生。(嗯,原則上。在實踐中,復制省略通常/總是確保shared_ptr創建者make_shared直接回傳給呼叫者,但這是一個細節。)
另一個(劣質)解決方案是回傳new直接回傳的指標并將其分配給shared_ptr呼叫者中的 a 。但這樣容易出錯,不推薦。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425948.html
