Grundlegende Frage zur Variablendeklaration
-
Hallo,
mir ist nicht ganz klar wann ich eine Variable wie deklarieren muss.
Wann deklariere ich etwas mit Zirkumflex und wann ohne?Point^ myPoint; //oder Point myPoint;
Die zweite Deklaration erzeugt mir doch eine Instanz der Klasse Point. Die erste Deklaration einen Zeiger auf die Instanz der Klasse. Oder hab ich das falsch verstanden?
Gruß und vielen Dank,
Soda
-
Wenn Du das Objekt auf dem GC-Heap haben willst, dann musst Du das ^ verwenden; ansonsten nicht.
Integrale Datentype und structs würde ich nie auf dem GC-Heap anlegen.
-
Und woher weiß ich wann ich das Objekt auf dem GC-Heap haben will/brauch?
Soweit ich das verstanden habe verlangen manche Funktionen ein GC-Heap Objekt und manche nicht.
Die DrawLine(^ Pen, Point, Point) möchte ja speziell ein ^Pen Objekt, aber zwei normale Point Objekte. Wieso wird bei dem Pen ein GC-Heap Objekt erwartet?
Gruß,
Soda
-
Man könnte sagen: Es ist Historisch bedingt...
Die meist verwendete Sprache für .NET ist C# und somit hat man sich damnals auf das geeinigt, was C# benötigt. Und C# kann nun mal "ref" Objekte nur als "echte" GC-Heap Objekte verwenden.
C++/CLI kann diese auch auf dem Stack anlegen... das kann C# nicht...
Du kannst aber als Regel machen: "ref"-Objekte legst Du auf dem GC-heap an, alles andere nicht.
-
OK Vielen Dank für die Info.
Gruß,
Soda