Tôi đang cố gắng xây dựng một đối tượng trong bản đồ có chứa nguyên tử, do đó không thể sao chép hoặc di chuyển AFAICT.Xây dựng tại chỗ một đối tượng không thể di chuyển trong bản đồ
Việc đọc C++ reference của tôi là bản đồ emplace
sẽ có thể thực hiện việc này. Nhưng đoạn mã sau không biên dịch vì các hàm tạo bị xóa hoặc không tồn tại. Sử dụng make_pair
không giúp ích gì.
#include <atomic>
#include <unordered_map>
class Z {
std::atomic<int> i;
};
std::unordered_map<int, Z> map;
void test(void) {
map.emplace(0, Z()); // error
map[0] = Z(); // error
}
Điều này có thể, và nếu không, tại sao không?
EDIT: Compiler là gcc 4.8.1, trên Linux
trình biên dịch nào bạn sử dụng? – Drop
'emplace' nhận các đối số hàm tạo, nhưng bạn đang truyền một đối tượng tạm thời. –
@NeilKirk Sau đó, làm thế nào khác sẽ gọi một constructor no-arg? –