我理解以下代码无法编译,因为 A 的移动构造函数被删除,因为互斥锁不可移动。
class A {
public:
A(int i) {}
private:
std::mutex m;
};
int main() {
std::vector<A> v;
v.emplace_back(2);
}
但是如果我希望将我的A
存储在标准容器中,我应该怎么做呢?我对 A
在容器“内部”构建感到满意。
最佳答案
std::vector::emplace_back
可能需要增加 vector 的容量。由于 vector 的所有元素都是连续的,这意味着将所有现有元素移动到新分配的存储空间。所以代码实现 emplace_back
通常需要调用移动构造函数(即使对于空 vector 的情况,它也会调用它零次)。
如果你使用,比如说,std::list<A>
,你就不会得到这个错误。 .
关于c++ - 将具有不可复制字段的对象插入 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40049854/