Heim > Backend-Entwicklung > C++ > Hauptteil

Wie übergebe ich Objektverweise korrekt an C 11 std::thread-Funktionen?

DDD
Freigeben: 2024-11-26 11:47:10
Original
436 Leute haben es durchsucht

How to Correctly Pass Object References to C  11 std::thread Functions?

Übergabe von Objektverweisen an die Thread-Funktion

Beim Arbeiten mit der C 11 std::thread-Schnittstelle kann es beim Übergabeversuch zu Problemen kommen Objektreferenzen als Argumente für die Thread-Funktion. Dieses Problem tritt auch bei der Übergabe einfacher Ganzzahlen auf, wie im folgenden Code beobachtet:

void foo(int& i) {
    // Do something with i
    std::cout << i << std::endl;
}

int k = 10;
std::thread t(foo, k);
Nach dem Login kopieren

Dieser Code wird wie erwartet kompiliert und ausgeführt, aber die Übergabe einer std::ostream-Referenz führt zu einem Kompilierungsfehler:

void foo(std::ostream& os) {
    // Do something with os
    os << "This should be printed to os" << std::endl;
}

std::thread t(foo, std::cout);
Nach dem Login kopieren

Ursache des Kompilierungsfehlers

Der Kompilierungsfehler ist auf den gelöschten Konstruktor für zurückzuführen std::thread. Standardmäßig kopieren Threads ihre Argumente, was es unmöglich macht, eine Referenz direkt zu übergeben.

Lösung: Verwendung von std::ref

Um eine Referenz als Argument an zu übergeben Wenn Sie eine Thread-Funktion verwenden möchten, müssen Sie sie mit std::ref (oder std::cref für konstante Referenzen) umschließen. Dadurch wird ein Referenz-Wrapper mit Wertesemantik erstellt, der das Vorhandensein von Kopien der Referenz ermöglicht.

std::thread t(foo, std::ref(std::cout));
Nach dem Login kopieren

Durch die Verwendung von std::ref können Sie eine Referenz an die Thread-Funktion übergeben und so eine direkte Manipulation der übergebenen Referenz ermöglichen Objekt. Es ist jedoch wichtig sicherzustellen, dass das referenzierte Objekt für die Dauer der Thread-Ausführung am Leben bleibt.

Das obige ist der detaillierte Inhalt vonWie übergebe ich Objektverweise korrekt an C 11 std::thread-Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage