Tôi có một số std::vector<Foo>
trong đó Foo
là một lớp có chứa Foo(Foo&&) noexcept
.std :: vector :: erase() không muốn di chuyển
Thêm đối tượng vào vùng chứa hoạt động hoàn hảo, tuy nhiên việc xóa chúng bằng cách sử dụng std::vector::erase(iterator)
thì không, GCC 4.7 cố gắng gọi toán tử gán mà tôi đã xóa. Các thông báo lỗi chính xác là:
lỗi: sử dụng chức năng xóa 'Foobar & Foobar :: operator = (const Foobar &)
Edit: Tất nhiên std::vector
gọi toán tử gán, không phải là bản sao constructor (bạn cũng có thể thấy điều đó trong thông báo lỗi). Cố định nó trong phần mô tả, xin lỗi.
Dưới đây là ví dụ mã nguồn theo yêu cầu:
#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());
}
Bạn có mã demo không? – kennytm
Nếu không có mã, thật khó để xem vấn đề là gì – sehe
Mã nguồn được thêm vào. :-) – stschindler