【发布时间】:2016-09-22 05:30:13
【问题描述】:
这是一个类似于我的代码:
for (auto &uptr : vector_of_unique_ptrs) { // 1
auto result = do_the_job_with_pointee(uptr.get()); // 2
record_intermidiate_result(result, std::move(uptr)); // 3
}
这里我有一个指向某些对象的唯一指针向量(第 1 行)。
我遍历向量(第 1 行)并使用指针做一些工作(第 2 行)。
工作完成后,我需要获取结果并将所有权传递给其他地方(第 3 行)。
代码编译执行没有任何问题,但是我感觉在迭代过程中移动iteratee是不合法的。
我“略读”了公开可用的 C++11 草案,但没有找到关于该主题的任何说明。
谁能告诉我上面的代码是否合法?
【问题讨论】:
-
您的向量将具有
nullptrunique_ptr。 -
您不应该使向量迭代器无效,即调用
erase()insert()等。修改元素非常好。 -
是的,现在我明白了。谢谢你们的cmets。
标签: c++ c++11 move-semantics unique-ptr