best c++11 way to store a vector of pointers

2019-10-22 06:49发布

我想存储的载体std::threads

目前,我实现它作为std::vector<std::thread*>然而,这需要手动删除std::thread小号

什么是做到这一点的最优雅的C ++ 11的方式? 我能看到std::shared_ptr ,但是是不是矫枉过正? 该指针是唯一的,但std::vector需要临时复制它们。

也许我并不需要指针,但std::thread是不可拷贝,但我觉得我做的。

谢谢!

Answer 1:

由于C ++ 11, vector只要求其值是可移动的,如thread是。 所以vector<thread>应该满足您的需求。

还有你可以用不可复制的类型做一些限制 - 你不能在复制值或缩小,只有移动或布设他们 - 但这些都是很容易适应。

如果您确实需要保存不可移动的类型( mutex ,例如),那么unique_ptr可能是最好的选择; 或类似容器dequelist并不需要移动自己的价值观。



Answer 2:

同比可以使用std::vector<std::thread>emplace_back

threads.emplace_back([](int i){ ++i; }, 10);

emplace_back使用完美转发直接传递它的参数std::thread构造函数,并在放置新的对象vector内存,是这样的:

new (vector_ptr + offset) std::thread(args...);

它不仅涉及运动 -处理对象是替代复制和在资源使用方面可能会更便宜一个新的语义。 std::thread支持移动



Answer 3:

使用std ::的unique_ptr如果你的编译器支持C ++ 11,或升压:: shared_ptr的,如果你的编译器不。

不,这是不是矫枉过正 - 这是良好的编程。



文章来源: best c++11 way to store a vector of pointers