将类Cotaining std ::线程添加到向量
Adding class cotaining std::thread to a vector
类声明:
class cA{
private:
std::thread t;
public:
cA()=default;
};
其他源文件中的某些地方:
cA *a = new cA();
std::vector<cA> v;
v.push_back(*a);
这会在编译时导致以下错误:
C2280: cA::cA(const cA &)': attempting to reference a deleted function
我认为这可能与std::thread
缺少复制构造函数的事实有关,并且向量试图制作cA
对象的副本。有人愿意解释吗?
std::thread
无法复制,因此编译器无法生成默认的复制构造函数,因为它不知道该如何处理类中的不可复制类型。它将在新副本中的std::thread
变量中放置什么?
因为它无法生成复制构造函数,因此已删除,就像您说过
一样cA(const cA &) = delete;
在您的班级定义中。
这是何时可以和无法创建隐式复制构造函数的规则:
http://en.cppreference.com/w/cpp/language/copy_constructor
与您的情况相关的行是:
T
具有无法复制的非静态数据成员(已删除,无法访问或模棱两可的复制构造函数(;
对您的问题的评论也要指出,即使确实编译,您的实际代码也不好。它将泄漏cA
对象。此处的正确代码(通过评论修复(:
v.emplace_back(); // since the cA constructor takes no parameters
或
v.push_back(cA());
这些都不需要cA
是可复制的,因为它使用了移动构造器。
您也可以尝试
v.push_back(std::move(*a));
相关文章:
- 有没有办法向这个向量添加元素?
- 这种方式是否可以接受向向量添加unique_ptr?
- 向向量添加元素
- 无法向向量添加回调
- 如何将向量添加到结构中以创建一个库存系统,在该系统中,我可以仅使用一个结构向系统添加多种不同的葡萄酒
- 在一个类中向向量添加元素不适用于其他类
- 以下向 c++ 向量添加元素的方法有什么区别
- 我可以在不推送向量的情况下向向量添加值吗?
- 向向量C++添加对
- 使用单词键将多个行号的向量添加到我的地图中
- 在C++中向指针数组中的向量添加元素
- 要创建一个一开始没有特定维度的类Vector,请在类中创建一个方法,允许向向量添加维度
- 一次向 C++ 向量添加多个元素
- STL - 向存储在 STL 映射中的向量添加值
- 向向量添加向量
- 如何向结构类型的向量添加点
- 为什么我的课'当我向向量添加实例时,会调用s析构函数
- 向c++向量添加新字段
- 在c++中向向量添加对象vs向向量添加指针
- 当Type为unique_ptr时,为向量添加运算符[]