std::unique_ptr std::move
时间: 2023-09-04 14:07:48 浏览: 196
智能指针unique_ptr的用法
5星 · 资源好评率100%
`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` 对象将拥有源对象之前所指向的对象。
希望这个示例能对你有帮助!如果你还有其他问题,请随时提问。
阅读全文