小编use*_*207的帖子

使用包含不可复制数据类型的类的向量

我的问题是我有一个包含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对象,但我宁愿不惜一切代价避免这种情况.

c++ stdvector

9
推荐指数
2
解决办法
775
查看次数

标签 统计

c++ ×1

stdvector ×1