下面是我用删除的副本构造函数和副本赋值运算符定义的类。这是唯一必须做的假设。
class MyClass
{
public:
explicit MyClass(int i) : i(i) {}
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
MyClass(MyClass&& other) :
i(std::move(other.i))
{}
MyClass& operator=(MyClass&& other) {
i = std::move(other.i);
return *this;
}
private:
int i;
};
然后的目标是在编译时将我的类添加到std :: vector。
int main()
{
std::vector<MyClass> v{MyClass{0},MyClass{1},MyClass{2}};
return 0;
}
我的编译器告诉我STL需要使用已删除的副本构造函数MyClass::MyClass(const MyClass&)
,但是有什么办法解决这个问题?
我已经知道在运行时添加值的一种可能方法,但是我认为以下方法是一个较差的解决方案,因为我丢失了编译时间检查。
int main()
{
std::vector<MyClass> v;
v.emplace_back(MyClass{0});
v.emplace_back(MyClass{1});
v.emplace_back(MyClass{2});
return 0;
}