Ich versuche, ein Objekt in einer Karte zu erstellen, die eine atomare enthält, so dass es weder kopiert noch bewegt werden kann.Construct-in-Place ein unbewegliches Objekt in einer Karte
Meine Lesung von C++ reference ist, dass Karte emplace
sollte dies tun können. Der folgende Code wird jedoch nicht kompiliert, weil Konstruktoren gelöscht oder nicht vorhanden sind. Die Verwendung von make_pair
hilft nicht.
#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
}
Ist das möglich, und wenn nicht, warum nicht?
EDIT: Compiler ist gcc 4.8.1, auf Linux
Welche Compiler verwenden Sie? – Drop
'emplace' nimmt die Konstruktorargumente, übergibt jedoch ein temporäres Objekt. –
@NeilKirk Dann, wie sonst würde man den No-Arg-Konstruktor aufrufen? –