如何包装一个C指针?使用 *mut T、Nonnull<T> 或 Unique<T>?

问题描述 投票:0回答:1

我正在调用一个分配内存并返回一个指针的 C 构造函数。

我发现了一些类似的问题。 他们使用 Nonnull*mut T 来包装它。

而且我还发现了另一个类似的结构

Unique
,它将占据
T
的所有权。

这让我想知道,它们有什么区别,我该如何选择?

rust
1个回答
2
投票

如果您的指针永远不为空,请使用

NonNull
。否则请使用
*const T
*mut T

Unique
是标准库的私有指针,你不能使用它(我认为它曾经被用来暴露不稳定,但现在不再了)。它代表一个拥有的类型:例如, it 用于
Box
Vec
。它基本上是
NonNull
,尽管它有一些差异,因为它被认为是拥有的:它意味着
Send
/
Sync
(和其他自动特征)如果
T
确实如此,也许它应该被视为别名模型拥有和美里(尽管我们并不明显想要这样,而且目前也不是)。

© www.soinside.com 2019 - 2024. All rights reserved.