我正在使用 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);
}
我很确定这工作正常,但是我的代码设置方式我相信所有对我的字符串的 shared_ptr 引用都超出了范围,因为这种转换方法不会增加 use_count,因此 shared_ptr 正在释放内存,而我仍然需要它。
有没有办法手动增加/减少 use_count?理想情况下,我会在转换为 void* 时增加 use_count,将 void* 传递给另一个函数,将 void* 转换回 shared_ptr 并减少 use_count。
或者,如果有人知道这个问题的另一种解决方案,我可以寻求帮助。
最佳答案
唯一真正的方法是在某个地方分配一个 shared_ptr
,它会存在足够长的时间,然后设置 void*
指向它。
关于c++ - 将 shared_ptr 转换为 void*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9918625/