我有一个存储Foo
类对象的std::vector<Foo>
,其中Foo
类包含Foo(Foo&&) noexcept
构造函数。
向容器中添加对象工作得非常好,但是使用std::vector::erase(iterator)
删除它们时则不行,GCC 4.7会尝试调用被我删除的赋值运算符。具体的错误信息如下:
error: use of deleted function ‘Foobar& Foobar::operator=(const Foobar&)
编辑: 当然std::vector
调用的是赋值运算符而不是拷贝构造函数(您也可以在错误消息中看到这一点)。已经在描述中进行了修正,抱歉。
这里有请求的示例源代码:
#include <vector>
class Foo {
public:
Foo() {}
Foo( Foo&& other ) noexcept {}
Foo( const Foo& ) = delete;
Foo& operator=( const Foo& ) = delete;
};
int main() {
std::vector<Foo> v;
v.push_back( Foo{} );
v.erase( v.begin() );
}
Foo
,但是你收到了一个关于Foobar
的错误信息?有些不匹配。请提供真实的代码。 - Pete Becker