c++ - 将具有不可复制字段的对象插入 std::vector

标签 c++ c++11 vector noncopyable emplace

我理解以下代码无法编译,因为 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/

相关文章:

c++ - reference_wrapper 和 std::ref 是如何工作的?

c++ - 无法将 unique_ptr<Basic> 设置为 p(new Basic())

c++ - 缓慢的文件读取和复制到内存中 - C++

c++ - VS2015无法从 'initializer list'转换为 'std::string'错误

c++ - LNK2038 : mismatch detected for 'RuntimeLibrary' : value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file. 对象

c++ - 为什么快速排序在重复元素多的情况下效率低下?

c++ - 关于C++中函数调用和求值的问题

C++11 和链接到 libstdc++ 的静态库

c++ - strlen(__FILE__) 是否在编译时求值

c++ - 使用 push_back 时,std::unique_ptr 是否移入了 std::vector?