c++中std::unique_ptr如何转移所有权_c++ unique_ptr所有权转移方法

std::unique_ptr所有权通过std::move转移,不可复制;可移动至另一变量、函数传参或返回、存入容器,转移后原指针为空,确保独占性。

c++中std::unique_ptr如何转移所有权_c++ unique_ptr所有权转移方法

在C++中,std::unique_ptr 是一种独占式智能指针,意味着同一时间只能有一个 unique_ptr 拥有对所管理对象的控制权。由于这种独占性,所有权不能被复制,但可以通过移动语义进行转移。以下是几种常见的所有权转移方式。

使用 std::move 转移所有权

最常用的方法是通过 std::move 将一个 unique_ptr 的所有权转移到另一个变量。

 #include <memory> #include <iostream>  int main() {     std::unique_ptr<int> ptr1 = std::make_unique<int>(42);     std::cout << *ptr1 << "n"; // 输出: 42      std::unique_ptr<int> ptr2 = std::move(ptr1); // 所有权从 ptr1 转移到 ptr2      // 此时 ptr1 为空,ptr2 指向原对象     if (ptr1 == nullptr) {         std::cout << "ptr1 is now nulln";     }     std::cout << *ptr2 << "n"; // 输出: 42 } 

调用 std::move(ptr1) 后,ptr1 不再持有对象,ptr2 成为唯一拥有者。

c++中std::unique_ptr如何转移所有权_c++ unique_ptr所有权转移方法

有道小P

有道小P,新一代AI全科学习助手,在学习中遇到任何问题都可以问我。

c++中std::unique_ptr如何转移所有权_c++ unique_ptr所有权转移方法64

查看详情 c++中std::unique_ptr如何转移所有权_c++ unique_ptr所有权转移方法

函数间传递所有权

可以将所有权传入函数或从函数返回。

立即学习C++免费学习笔记(深入)”;

  • 传入函数: 接收参数应为右值引用或通过 std::move
  • 返回所有权: 函数可直接返回 unique_ptr,利用移动或返回值优化(RVO)

 #include <memory>  void takeOwnership(std::unique_ptr<int> data) {     std::cout << "Received value: " << *data << "n"; } // data 在此析构  std::unique_ptr<int> createPtr() {     return std::make_unique<int>(100); }  int main() {     auto ptr = std::make_unique<int>(50);     takeOwnership(std::move(ptr)); // 转移进函数      auto newPtr = createPtr(); // 接收返回的所有权     std::cout << *newPtr << "n"; // 输出: 100 } 

容器中存储 unique_ptr 并转移

可以在容器如 std::vector 中存储 unique_ptr,添加元素时需使用 std::move

 #include <vector> #include <memory>  int main() {     std::vector<std::unique_ptr<int>> vec;     auto ptr = std::make_unique<int>(99);      vec.push_back(std::move(ptr)); // 必须 move,否则编译失败      std::cout << *vec[0] << "n"; // 输出: 99 } 

基本上就这些。只要记住:unique_ptr 不能复制,只能移动,使用 std::move 显式转移所有权即可。不复杂但容易忽略细节。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇
text=ZqhQzanResources