如何使用 C++ 将 shared_ptr 对象分配给原始指针类型的函数
How to assign the shared_ptr object to the function of type raw pointer using C++
我正在函数中创建 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();
是的,@user17732522 说的。
在编写的代码中,当您的第一个版本 CreateClassInstance
return 时,l_MyClassInterface
将超出范围,并带走您新创建的对象。当您 return a shared_ptr
时,与 return 由 get()
编辑的指针相反,它用于跟踪对象引用计数的机制将启动并阻止这种情况发生。 (好吧,原则上。在实践中,复制省略通常/总是确保 make_shared
创建的 shared_ptr
直接 returned 给调用者,但这是一个细节。)
另一个(较差的)解决方案是 return 直接由 new
编辑的指针 return 并将其分配给调用者中的 shared_ptr
。但那是error-prone,不推荐
我正在函数中创建 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();
是的,@user17732522 说的。
在编写的代码中,当您的第一个版本 CreateClassInstance
return 时,l_MyClassInterface
将超出范围,并带走您新创建的对象。当您 return a shared_ptr
时,与 return 由 get()
编辑的指针相反,它用于跟踪对象引用计数的机制将启动并阻止这种情况发生。 (好吧,原则上。在实践中,复制省略通常/总是确保 make_shared
创建的 shared_ptr
直接 returned 给调用者,但这是一个细节。)
另一个(较差的)解决方案是 return 直接由 new
编辑的指针 return 并将其分配给调用者中的 shared_ptr
。但那是error-prone,不推荐