我正在C开发一个应用程序,我需要使用第三方C++库。所以,我基本上是围绕C++库编写一个包装器,以便可以从纯C中的应用程序调用它。库中的一些方法返回类型为boost :: shared_ptr的指针,我需要将其转换为void * [for C],然后将其转换回boost :: shared_ptr类型以重用它以进行进一步处理。我用下面的方法来进行转换:boost :: shared_ptr void *反之亦然
到void *:
void * func1()
{
//after the boost::shared_ptr is created
return static_cast<void *> (SHARED_PTR.get())
}
从无效*:
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(VOID_PTR)'? –
2013-12-14 11:36:26