我的问题是我有一个包含std :: ifstream,std :: ofstream和std :: mutex的类.这些对象都不能直接复制,如下例所示.
std::ifstream stream1;
std::ifstream stream2;
stream1 = stream2; //<-Compiler Error!
Run Code Online (Sandbox Code Playgroud)
我的问题不是我要复制我的类的任何实例,而是vector中的push_back()函数试图为我的类调用复制构造函数.我设计了一个复制我的问题并将其粘贴在下面的示例.
#include <fstream> //for std::ifstream // std::ofstream
#include <vector> //for std::vector
#include <mutex> //for std::mutex
class MyClass
{
public:
MyClass(int ID) : ID(ID) { }
std::ofstream outputstream;
std::ifstream inputstream;
std::mutex mymutex;
private:
int ID;
};
int main()
{
std::vector<MyClass> MyVector;
MyVector.push_back(MyClass(1)); //<-- Error C2280 'MyClass::MyClass(const MyClass &)': attempting to reference a deleted function
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在试图弄清楚如何解决这个错误时遇到了问题.任何帮助将不胜感激.请记住,我永远不会直接调用复制构造函数,因为我在实际场景中不需要复制此类的实例,但似乎push_back正在调用它并且我在尝试覆盖它时失败了.
编辑:我认为解决它的一种方法是使用指针而不是ifstream,ofstream和mutex对象,但我宁愿不惜一切代价避免这种情况.