将shared_ptr强制转换为void*

Jos*_*ain 5 c++ boost shared-ptr

我正在使用libev,它需要将我的数据转换为void*以符合其预定义的结构.我需要将boost :: shared_ptr强制转换为void*,然后将void*转换回boost :: shared_ptr.这是我的代码

void foo(boost::shared_ptr<string>& a_string)
{
 void* data = (void*)a_string.get();
 boost::shared_ptr<string> myString((string*)data);
}
Run Code Online (Sandbox Code Playgroud)

我很确定这个工作正常,但是我的代码设置的方式我相信所有对我的字符串的shared_ptr引用都超出了范围,因为这个转换方法不会增加use_count,因此shared_ptr释放内存,而我仍然需要它.

有没有办法手动增加/减少use_count?理想情况下,当我转换为void*时,我会增加use_count,将我的void*传递给另一个函数,将void*转换回shared_ptr并减少use_count.

或者如果有人知道这个问题的另一种解决方案,我可以使用任何帮助

Pup*_*ppy 4

执行此操作的唯一真正方法是分配一个shared_ptr将存在足够长的时间的某个位置,然后将其设置void*为指向该位置。