unique_ptr与std::move的使用

形参为unique_ptr u2,而后实参为std::move(unique_ptr u1),这样会将原本u1的内存传递给u2,避免了传递拷贝。例如:

1 void fun(std::unique_ptr u2)
2 {
3 }
4 
5 unique_ptr<cls> u1;
6 fun(std::move(u1));

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`std::unique_ptr` 是 C++11 引入的一种智能指针,它提供了独占所有权的语义。通过调用 `std::move` 函数可以将 `std::unique_ptr` 对象的所有权转移到另一个 `std::unique_ptr` 对象中。 下面是一个示例,展示了如何使用 `std::move` 函数来转移 `std::unique_ptr` 对象的所有权: ```cpp #include <iostream> #include <memory> int main() { std::unique_ptr<int> sourcePtr = std::make_unique<int>(42); // 使用 std::move 转移 sourcePtr 对象的所有权到 targetPtr std::unique_ptr<int> targetPtr = std::move(sourcePtr); // sourcePtr 不再拥有有效的对象 if (sourcePtr) { std::cout << "sourcePtr 不为空指针" << std::endl; } else { std::cout << "sourcePtr 为空指针" << std::endl; } // targetPtr 拥有有效的对象 if (targetPtr) { std::cout << "targetPtr 不为空指针" << std::endl; std::cout << "targetPtr 的值: " << *targetPtr << std::endl; } else { std::cout << "targetPtr 为空指针" << std::endl; } return 0; } ``` 在上述示例中,我们首先创建了一个 `std::unique_ptr` 对象 `sourcePtr`,并使用 `std::make_unique` 方法分配了一个整数对象并将其赋值为42。接下来,我们使用 `std::move` 函数将 `sourcePtr` 对象的所有权转移到 `targetPtr`。然后,我们检查 `sourcePtr` 和 `targetPtr` 是否为空指针,并打印相应的信息。 输出结果将是: ``` sourcePtr 为空指针 targetPtr 不为空指针 targetPtr 的值: 42 ``` 请注意,在调用 `std::move` 后,源 `std::unique_ptr` 对象将不再拥有有效的对象,而目标 `std::unique_ptr` 对象将拥有源对象之前所指向的对象。 希望这个示例能对你有帮助!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值