pointer::swap() vs std::ptr::swap() in Rust



指针的方法swap()std::ptr::swap()有什么不同?

签名是相似的,并且在我测试时它们的行为是相同的。

pub unsafe fn swap(self, with: *mut T)
pub unsafe fn swap<T>(x: *mut T, y: *mut T)

对于std::mem::swap()(引用而不是指针),有一种情况,我们不能调用std::mem::swap(),因为它需要两个可变引用。在这种情况下,我们将调用slice::swap()为例。那std::ptr::swap()呢?

ptr.swap()std::ptr::swap()之间没有区别-前者的实现只是调用后者:

pub const unsafe fn swap(self, with: *mut T)
where
T: Sized,
{
// SAFETY: the caller must uphold the safety contract for `swap`.
unsafe { swap(self, with) }
}

根据文档,mem::swapptr::swap之间的唯一区别是:

  • ptr::swap操作指针而不是引用。
  • ptr::swap允许指针值重叠
  • ptr::swap不要求对指向数据进行初始化/满足指向类型的要求。

除此之外,它们的语义是相同的。

相关内容

  • 没有找到相关文章

最新更新