我有一个不可复制的类(即复制构造函数和赋值运算符被标记为'delete').我想将它们保存在std :: vector中.
它是一个RAII类,所以简单地存储指针或引用它不是我想要的.
我对新的初始化列表和移动构造函数的了解有限,这可能吗?
我收到了一些非常奇怪的错误.编译器似乎想要因为某些我不理解的原因而调用复制构造函数.
(118) std::map<int, layer> xs;
(119) xs.begin()->first; // error?!
Run Code Online (Sandbox Code Playgroud)
layer 是一种不可复制的可移动类型.
class layer : public observable
{
layer(const layer&);
layer& operator=(const layer&);
public:
layer(int index = -1);
layer(layer&& other);
layer& operator=(layer&& other);
//...
};
Run Code Online (Sandbox Code Playgroud)
由于某种原因,第119行导致编译器尝试调用复制构造函数std::pair,为什么?
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(131): error C2248: 'layer::layer' : cannot access private member declared in class 'layer'
1> ..\layer.h(55) : see declaration of 'layer::layer'
1> ..\layer.h(53) : see declaration of 'layer'
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(129) : while compiling class …Run Code Online (Sandbox Code Playgroud)