gpt4 book ai didi

c++ - 将 shared_ptr 转换为 void*

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:15 28 4
gpt4 key购买 nike

我正在使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com