Pointers 如何获取框的原始指针而不使用它?

Pointers 如何获取框的原始指针而不使用它?,pointers,rust,Pointers,Rust,我需要把一个原始指针传递给一个结构到C++,然后仍然想要使用那个方框。 我发现了这个功能,但它吃掉了盒子,我不能再使用生锈的盒子了。有办法得到常数吗?我可以在C++侧上使用康斯坦施放。 这就是我想做的: 让handle\u ptr=Box:::进入\u rawhandle; std::thread::spawnmove | |{ 让rt=tokio::runtime::Builder::new\u current\u线程 建筑 打开…的包装 rt.block_on handle.run; };

我需要把一个原始指针传递给一个结构到C++,然后仍然想要使用那个方框。 我发现了这个功能,但它吃掉了盒子,我不能再使用生锈的盒子了。有办法得到常数吗?我可以在C++侧上使用康斯坦施放。 这就是我想做的:

让handle\u ptr=Box:::进入\u rawhandle; std::thread::spawnmove | |{ 让rt=tokio::runtime::Builder::new\u current\u线程 建筑 打开…的包装 rt.block_on handle.run; }; 返回句柄

我知道这是不安全的,但是我不知道其他方法允许C++代码在其他线程上运行,以调用RIST对象的线程安全方法。

< P>可以取消引用框并将引用作为原始指针转换为:
let handle_ptr: *const Handle = &*handle;
或:

请注意,您还没有使用不安全的。你需要使用不安全的去引用这个指针,包括把它传递给C++函数。当您使用不安全代码时,编译器无法帮助您,您需要确保不触发未定义的行为,这包括检查影响在不安全代码中访问的内存的安全代码

在这种情况下,C++函数在空闲后使用该框后可以使用指针。因此,由你来确保这不会发生

有关原始指针,请参见文档中的示例:

在将指针传递给另一个线程后,将该框保留在周围,这样可以在另一个线程仍在运行时删除它。你如何避免这个问题?
let handle_ptr = &*handle as *const Handle;