相关疑难解决方法(0)

移动std :: mutex的构造函数

c ++标准库中的许多类现在都有移动构造函数,例如 -

thread::thread(thread&& t)
Run Code Online (Sandbox Code Playgroud)

但似乎std :: mutex没有.我知道它们不能被复制,但是能够从"make_mutex"函数中返回一个似乎是有意义的.(不是说它有用,只是它有意义)

有什么理由说std :: mutex没有移动构造函数吗?

c++ c++11

37
推荐指数
2
解决办法
1万
查看次数

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

我的问题是我有一个包含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++ ×2

c++11 ×1

stdvector ×1