举例说明C++中的所有权转移
时间: 2023-11-14 14:47:13 浏览: 64
C/C++中文帮助文档
5星 · 资源好评率100%
当使用std::move时,常见的一个例子是转移std::vector的所有权。以下是一个示例:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> source {1, 2, 3, 4, 5};
// 使用std::move将source的所有权转移到target
std::vector<int> target = std::move(source);
// source现在处于有效但未定义的状态
// target拥有了source原来的内容
// 输出target的内容
for (const auto& num : target) {
std::cout << num << " ";
}
std::cout << std::endl;
// 尝试使用source,可能会导致未定义行为
// 因为其内容已被转移
for (const auto& num : source) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果:
```
1 2 3 4 5
```
在这个例子中,我们创建了一个名为source的std::vector,并初始化它包含的整数。然后,我们使用std::move将source的所有权转移到target。现在,target拥有了source原来的内容,而source处于有效但未定义的状态。
最后,我们分别输出target和source的内容。可以看到,target正确地拥有了原来的内容,而使用source会导致未定义行为。
这个例子展示了如何使用std::move进行所有权转移,并且强调了在转移后使用原对象可能会导致问题。确保在转移所有权后,不再使用原对象是很重要的。
阅读全文