Box::into_raw()和Box::leak()之间到底有什么区别?

4

众所周知,Box::into_raw() 和 Box::leak() 都会消耗当前的 Box 并失去对内存的所有权。

这两个函数似乎只是返回值类型不同,那么它们之间到底有什么区别呢?

它们的典型应用场景如何?


5
into_raw通常用于外部函数接口(FFI),以获取一个指针,该指针可以被发送到其他语言,并且通常与稍后调用的from_raw匹配以重新获取所有权并释放内存。leak通常用于获取一个'static引用来满足某些API要求,并且通常会保留直到程序退出。 - Jmb
@Jmb:你能把那个作为答案发布一下吗?在我看来,除了可能需要强调获取安全代码中 'static 引用是实际正确的生存期这一点之外,那几乎涵盖了所有内容。 - Ry-
更多信息可以在这里找到。 - yymmyb
1个回答

7

into_raw 通常用于 FFI,以获取一个指针,该指针可以发送到其他语言,并通常与稍后调用的 from_raw 匹配,以重新获取所有权并释放内存。

leak 通常用于获取 'static 引用以满足某些 API 要求,并通常保留直到程序退出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接