C++ Objektübergabe an eine Funktion

Max H

Neues Mitglied
Hey erstmal,
ich bin gerade dabei ein kleines Spiel für ein Schulprojekt auf der Konsole zu schreiben und brauche dafür ein HANDLE, welches ich an verschiedene Funktionen übergebe. Ich komme aus der Java Welt und wollte fragen, ob Objekte in C++ als Kopie oder Referenz an Funktionen übergeben werden?
Desweiteren arbeite ich mit 2 Threads. Was passiert wenn das Programm auf einen Thread zuzugreifen möchte, den ich es nicht gibt. Sollte man in solchen Fällen eine Exception erwarten und ggf. abfangen? Danke schonmal für die Hilfe.

Freundliche Grüße
 

httpdigest

Top Contributor
[...]und wollte fragen, ob Objekte in C++ als Kopie oder Referenz an Funktionen übergeben werden?
Es ist sowohl Pass By-Value als auch By-Reference möglich. Default ist immer By-Value. By-Value kannst du ein Objekt z.B. übergeben, wenn du es auf dem Stack alloziierst und dann einfach als Argument einer Methode übergibst. Dann sind aber einige Regeln zu beachten, z.B. wird eine Kopie des Objektes erzeugt, inklusive eines Aufrufs des copy-Konstruktors (falls einer existiert) und des Destruktors (falls einer existiert).
By-Reference kannst du ein stackalloziiertes Objekt übergeben, wenn du hinter den Typ des Parameters ein & (Kaufmanns-Und, engl. Ampersand) hängst.
Bei Objekten, die dynamisch alloziiert wurden (also mit dem 'new' Operator), hast du ja eh einen Zeiger auf das Objekt. Wenn du diesen dann einer Methode als Argument übergibst, wird ja nur die Adresse auf das eigentliche Objekt kopiert und nicht das Objekt selbst.
Jetzt aber zu HANDLE. Meinst du den Win32 Typ "HANDLE"?: https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#HANDLE
Dieser ist ja keine C++ Klasse sondern einfach nur ein typedef auf void*. Es ist also ein "opaque value", den du quasi wie ein int verwenden kannst, also einfach immer Per-Value übergeben kannst.
 

Neue Themen


Oben