我的问题是我有一个包含std :: ifstream,std :: ofstream和std :: mutex的类。这些对象都不能直接复制,如下例所示。
timeout()
我的问题不是我要复制我的类的任何实例,而是vector中的push_back()函数试图为我的类调用复制构造函数。我设计了一个复制我的问题并将其粘贴在下面的示例。
std::ifstream stream1;
std::ifstream stream2;
stream1 = stream2; //<-Compiler Error!
我在试图弄清楚如何解决此错误时遇到问题。任何帮助将不胜感激。请记住,我永远不会直接调用复制构造函数,因为我在实际场景中不需要复制此类的实例,但似乎push_back正在调用它并且我在尝试覆盖它时失败了
编辑:我认为解决这个问题的一种方法是使用指针而不是ifstream,ofstream和mutex对象,但我宁愿不惜一切代价避免这种情况。
答案 0 :(得分:4)
由于您可以访问C ++ 11功能,因此可以使用emplace_back来构建元素。
MyVector.emplace_back(1);
然而,std::mutex
存在一些问题。该成员必须是一个指针才能使上述工作。否则,您可以将类的所有元素更改为可复制的类型(例如,指针)。
答案 1 :(得分:4)
这里真正的问题是这个类包含std::mutex
成员。哪个无法复制/移动。这意味着具有互斥成员的类不喜欢居住在向量内。
您需要为您的类创建自定义副本和/或移动构造函数,并实现相应的语义来复制流,并找出您要对互斥锁执行的操作。
答案 2 :(得分:3)
您可以尝试使用指向对象的指针向量。最好使用某种智能指针,而不是原始指针的矢量。
即。 的std ::矢量&lt;的std :: shared_ptr的&LT; MyClass&gt;&gt; MyVector;
现在你有一个指向MyClass对象的指针容器。