我理解以下代码无法编译,因为A的移动构造函数被删除,因为互斥锁不可移动。
class A {
public:
A(int i) {}
private:
std::mutex m;
};
int main() {
std::vector<A> v;
v.emplace_back(2);
}
但是如果我希望我的A
存储在std容器中,我应该怎么做呢?我很好A
正在构建&#34;内部&#34;容器。
答案 0 :(得分:3)
std::vector::emplace_back
可能需要增加向量的容量。由于向量的所有元素都是连续的,这意味着将所有现有元素移动到新分配的存储。因此,实现emplace_back
的代码通常需要调用移动构造函数(即使对于具有空向量的情况,它也会调用它为零次。)
如果您使用std::list<A>
,则不会出现此错误。