Warum dies undefiniertes Verhalten verursachen?Emplace zurück Thread auf Vektor
#include <iostream>
#include <thread>
#include <vector>
std::vector<std::thread> threads(3);
void task() { std::cout<<"Alive\n";}
void spawn() {
for(int i=0; i<threads.size(); ++i)
//threads[i] = std::thread(task);
threads.emplace_back(std::thread(task));
for(int i=0; i<threads.size(); ++i)
threads[i].join();
}
int main() {
spawn();
}
Wenn ich Themen wie in Kommentarzeile Thread erstellt wird kopiert/verschoben Zuordnung so seine Ordnung, aber warum nicht funktioniert, wenn anstelle Thread zu schaffen?
Bitte spezifischere über „nicht funktioniert“ und „nicht definiertes Verhalten“. Um ein Objekt in-place zu erstellen (d. H. Vollständig ellidierende Kopie), sollten Sie threads.emplace_back (task) ausführen. – Dmitry
Die Threads, die Sie versuchen, beizutreten, sind nicht verbindbar. Der allgemeine Ratschlag für C++ lautet wie immer: Bevor Sie etwas Komplizierteres machen, vergewissern Sie sich, dass Sie * 'int' und' std :: vector 'vollständig verstehen. Gehen Sie nicht weiter, bis Ihnen beide völlig klar sind, und wenn Sie ein Problem haben, reduzieren Sie es zuerst auf "int" oder "std :: vector ". –