我正在做一个计算机科学项目,其中我将stl库向量用作向量(Table是我实现的类)。当我尝试在类表中未实现operator =的情况下使用擦除方法时,它会失败。然后我添加了=,现在可以使用了,但是我不确定这是问题所在。是否需要在类中具有operator =才能使用擦除方法?这是一个示例代码:
vector<Table> tables;
Table t("1");
Table t2("2");
tables.push_back(t);
tables.push_back(t2);
tables.erase(tables.begin());//If no operator = is defined this gives problems
是否需要在类中使用operator =才能使用擦除方法?
是,这是标准要求。
为什么不定义它就运行?
一个类具有默认情况下由编译器生成的隐式赋值运算符,除非在某些情况下(例如,如果它具有不可分配的子对象)。
考虑代码中会发生什么。向量中有两个Table
,然后擦除第一个。完成后,您将获得一个Table
,并且第一个“曾经是”位于存储位置中]
为此,矢量需要将第二个复制/移动到第一个位置。它通过分配来完成。