You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pointer::swap()与std::ptr::swap()的区别是什么?

Rust中pointer::swap()与std::ptr::swap()的区别及适用场景

一、pointer::swap()与std::ptr::swap()的核心差异

两者功能完全等价,底层实现也高度一致,唯一的区别体现在调用形式上:

  • 调用风格不同:
    • pointer::swap()是*mut T类型的方法,调用时以指针实例为主体,语法为ptr_a.swap(ptr_b),更贴近面向对象的调用习惯;
    • std::ptr::swap()是标准库提供的自由函数,调用时需传入两个指针参数,语法为std::ptr::swap(ptr_a, ptr_b),属于函数式调用风格。
  • 底层关联:实际上pointer::swap()的内部逻辑就是直接调用std::ptr::swap(self, with),所以二者在测试中表现完全一致是必然结果。

二、std::ptr::swap()的适用场景

std::mem::swap()要求传入两个合法的可变引用,而Rust的借用规则会限制可变引用的使用(比如不能同时存在指向同一内存的两个可变引用、引用必须始终有效),当你无法满足这些条件时,std::ptr::swap()就是合适的替代方案:

  • 它直接操作原始指针,不受Rust借用规则的约束,适用于需要绕过借用规则的底层内存操作场景;
  • 对比slice::swap():slice::swap()只能用于交换切片中指定索引的元素,是上层封装;而std::ptr::swap()是更底层的通用操作,只要两个*mut T指针指向有效、可写的同类型内存,就能用来交换内容,但因为是unsafe操作,需要开发者自行保证内存安全(比如指针非空悬、内存可访问等)。

内容的提问来源于stack exchange,提问作者ynn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:35:34