c++ - 将 shared_ptr 转换为 void*

标签 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);
}

我很确定这工作正常,但是我的代码设置方式我相信所有对我的字符串的 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/

相关文章:

c++ - 为什么在此示例中从 unique_ptr<derived> 自动向上转换为 unique_ptr<base> 失败?

c++ - 游戏GUI库

c++ - boost asio udp async_read_from 缓冲区大小

c++ - 如何更改 shared_ptr 中的指针而不失去删除内存的能力?

c++ - 从数组的共享PTR访问共享PTR

c++ - 如何在Ubuntu中为C++配置Visual Studio代码

c++ - 如何将代码从 Python Pytorch 翻译或转换为 C++ Libtorch

c++ - 带有 boost::asio 的 TCP 服务器,线程池的可扩展性与无堆栈协程

c++ - Boost.Asio async_handshake 无法取消

c++ - 从重载的复制构造函数中调用默认复制构造函数