unique_ptr是C++中模拟Rust所有权最接近的工具,通过禁用拷贝、只允许移动来实现单一所有权和自动释放,但无borrow检查和lifetime保障。

unique_ptr 是 C++ 中模拟 Rust 所有权语义最接近的工具,但它不是 Rust 的“复制粘贴”,而是用移动语义(move semantics)在编译期强制实现单一所有权和自动释放——关键在于理解 移动即转移,拷贝被禁用 这一设计核心。
Rust 中变量绑定拥有值、赋值/传参即转移所有权、禁止浅拷贝;C++ 的 unique_ptr 通过删除拷贝构造函数和拷贝赋值运算符,只保留移动构造和移动赋值,达成类似效果:
auto p = std::make_unique<int>(42);</int>
auto q = std::move(p); —— 此后 p 变为空(p == nullptr),q 持有原对象auto r = p; 或 func(p)(若参数是 unique_ptr<t></t> 值类型)报错函数返回所有权、函数接收并接管所有权、跨作用域转移,都靠 std::move 显式表达意图:
std::unique_ptr<foo>create_foo() { return std::make_unique<foo>(); }</foo></foo>(C++17 后允许直接返回,编译器自动移动)void consume(std::unique_ptr<foo>ptr) { /* ptr 离开作用域时自动析构 */ }</foo>
if (condition) { owner = std::move(temp); } —— 类似 Rust 的 if let 或 take() 后再赋值C++ 的 unique_ptr 不提供 Rust 那样的借用(&T / &mut T)和生命周期标注。裸指针解引用(*ptr 或 ptr->method())仍可能空解引用或悬垂;Rust 编译器阻止的错误,C++ 需靠程序员自律或辅助手段:
立即学习“C++免费学习笔记(深入)”;
if (ptr) { ... }
Foo* raw = ptr.get(); 后不能假设它一直有效std::shared_ptr(但这就偏离了 Rust 的单一所有权模型)像 Rust 的 Drop trait,unique_ptr 支持自定义删除逻辑,可封装文件句柄、锁、GPU 资源等:
using FilePtr = std::unique_ptr<file>;</file>,>FilePtr f(fopen("x.txt", "r"), &fclose); —— 离开作用域自动调用 fclose
Drop 更底层(无 move-only 类型系统保障),但配合 RAII 能达到相似的安全边界以上就是C++独特指针所有权_C++怎么用unique_ptr模拟Rust所有权转移的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号