我正在开发一款C语言应用程序,需要使用第三方的C++库。因此,我基本上在编写一个包装器,使得我的纯C应用程序能够调用它。库中的一些方法返回boost::shared_ptr类型的指针,我需要将其转换为void* [用于C语言],然后再将其转换回boost::shared_ptr类型,以便进行进一步处理。我使用以下方式来完成转换:
转换为void* :
转换为void* :
void * func1()
{
//after the boost::shared_ptr is created
return static_cast<void *> (SHARED_PTR.get())
}
从 void* :
void func2(void * VOID_PTR) //VOID_PTR returned by func1
{
boost::shared_ptr<T> SHARED_PTR = *(boost::shared_ptr <T> *)(VOID_PTR);
}
然而,在func2中我遇到了SIGSEGV错误,我认为这是因为shared_ptr被销毁,因为它的引用计数变为0。
我正在寻找正确的转换方式,并期待SO社区专家的建议。
提前感谢!
boost::shared_ptr<T>(VOID_PTR)
? - user529758delete p;
,你怎么能做boost::shared_ptr<T>(p)
呢? - curiousguy