Mã này confuses me:Yêu cầu sao chép/di chuyển đối với các loại khóa/giá trị trong std :: map?
struct foo {
int i;
foo(int j) : i(j) {}
foo(const foo &) = delete;
foo(foo &&) = delete;
foo &operator=(const foo&) = delete;
foo &operator=(foo&&) = delete;
};
bool operator<(const foo &f1, const foo &f2)
{
return f1.i < f2.i;
}
int main(int argc, char **argv)
{
std::map<foo,int> f;
std::map<foo,int> f2 = f; //error (as expected)
std::map<foo,int> f3 = std::move(f); //no error (why?)
return 0;
}
Bởi vì tôi nhận được không có lỗi đó, nó có vẻ như khi di chuyển bản đồ không có đối tượng chủ chốt được tạo ra (thậm chí không cho di chuyển một đối tượng quan trọng vào nó).
Tại sao không? Tôi có thể dựa vào hành vi này theo tiêu chuẩn C++ 11 không?
Nói chung, yêu cầu sao chép/di chuyển nào có vị trí std::map
trên các loại khóa và giá trị và trong điều kiện nào?
di chuyển các yêu cầu _no_ của các vị trí trên bản đồ trên khóa và giá trị. –
@MooingDuck, điều đó không đúng nếu loại cấp phát không lan truyền –
ah đúng, người phân bổ có thể gây rối với mọi thứ. –