【发布时间】:2020-04-14 18:28:08
【问题描述】:
我正在尝试在 unique_ptrs 的向量上异步调用 reset():
std::vector<std::unique_ptr<SomeClass>> myVector;
for (auto& keyVal : myVector) {
future<void> f = async(launch::async, [=]() {
keyVal.second.reset();
});
listOfFutures.push_back();
}
这不起作用有两个原因:
unique_ptr的reset()函数没有标记const,但是unique_ptr在复制时默认得到const。如果我将
async函数标记为mutable,编译器会告诉我我正在调用隐式删除的复制构造函数,我不明白。
【问题讨论】:
-
如果你设法为该 unique_ptr 创建了一个非常量引用,它就不再是一个唯一的 ptr - 你将有两个对它的引用。失败的目的。
-
是的,这也是我的想法,但必须有一种更简洁的方法来异步调用唯一 ptrs 上的重置,而不会将它们从原始结构中删除。
-
@sublime 不,因为那样它将不再是唯一指针,您将有两种方法来控制对象的生命周期。如果你想使用
std::shared_ptr -
顺便说一句,您的目标是什么?你想解决什么问题?
-
您不想使用
move解决方案的原因是什么?您在 lamda 中重置了unique_ptr,这表明您将不再在它之外使用它。
标签: c++ asynchronous c++14 c++17 unique-ptr