1

我知道以下代码无法编译,因为 A 的移动构造函数被删除,因为互斥锁不可移动。

class A {
  public:
    A(int i) {}

  private:
    std::mutex m;

};


int main() {    
    std::vector<A> v;
    v.emplace_back(2);
}

但是,如果我希望A将我的存储在 std 容器中,我应该怎么做呢?我很乐意A在容器“内部”建造。

4

1 回答 1

3

std::vector::emplace_back可能需要增加向量的容量。由于向量的所有元素都是连续的,这意味着将所有现有元素移动到新分配的存储中。因此,实现代码emplace_back通常需要调用移动构造函数(即使对于您使用空向量的情况,它也会调用它零次)。

如果你使用了,比如说,你不会得到这个错误std::list<A>

于 2016-10-14T18:42:36.490 回答