我正在调用一个分配内存并返回一个指针的 C 构造函数。
我发现了一些类似的问题。 他们使用 Nonnull 或 *mut T 来包装它。
而且我还发现了另一个类似的结构
Unique
,它将占据T
的所有权。
这让我想知道,它们有什么区别,我该如何选择?
如果您的指针永远不为空,请使用
NonNull
。否则请使用 *const T
或 *mut T
。
Unique
是标准库的私有指针,你不能使用它(我认为它曾经被用来暴露不稳定,但现在不再了)。它代表一个拥有的类型:例如, it 用于 Box
和 Vec
。它基本上是 NonNull
,尽管它有一些差异,因为它被认为是拥有的:它意味着 Send
/Sync
(和其他自动特征)如果 T
确实如此,也许它应该被视为别名模型拥有和美里(尽管我们并不明显想要这样,而且目前也不是)。