以下代码不在VS2013中编译。
#include <memory>
#include <vector>
struct Struct {
std::unique_ptr<int> data;
};
int main() {
std::vector<Struct> vec;
vec.emplace_back();
vec.emplace_back();
vec.front() = std::move(vec.back());
return 0;
}
我收到以下错误:
error C2280: attempting to reference a deleted function
似乎VS编译器在代码显式请求移动时尝试调用赋值运算符。这是一个错误吗?这个问题有没有解决方法?
答案 0 :(得分:3)
VS2013不会自动生成所需的构造函数。
&#34; Rvalue引用v3.0&#34;添加新规则以自动生成移动 构造函数和在特定条件下移动赋值运算符。 但是,这在Visual Studio 2013中的Visual C ++中未实现, 由于时间和资源的限制。
因此,为了编译程序,您必须至少实现这些构造函数:
struct Struct {
std::unique_ptr<int> data;
Struct() { }
// For exposition purposes only, change as needed
Struct(Struct&& o) : data(std::move(o.data)) {}
Struct& operator=(Struct&& other) {
data = std::move(other.data);
return *this;
}
};
似乎是在Microsoft's online compiler, though中实施的。