Tracking-Handle
-
Hallo Leute,
hab eine Frage betreffend Tracking-Handle:
Wenn ich folgenden Code habe:
IrgendeinObject^ obj1; IrgendeinObject^ obj2; obj1 = gcnew IrgendweinObject; obj2 = obj1;
Soweit so klar. Da obj2 nun die Adresse von obj1 erhalten hat, kann ich auf deren Methoden und Variablen zugreifen und diese auch ändern.
Wieso und wann braucht man dann ein Tracking-Handle "%"??? wenn das ja so auch geht?!Grüße
Stefan
-
Culan schrieb:
Hallo Leute,
IrgendeinObject^ obj1; IrgendeinObject^ obj2; obj1 = gcnew IrgendweinObject; obj2 = obj1;
Versuch das mal mit einem String ^
Gruß
foodax
-
Da hast Du Recht. Strings vom Typ "String^" werden mit dem Zuweisungsoperranden "=" kopiert!
Dann dürfte das der Einzigste Verwendungsfall für einen "%"-Tracking-Handle sein oder?
-
^ heisst (Tracking) Handle: http://msdn.microsoft.com/en-us/library/yk97tc08.aspx
% heisst Tracking Reference: http://msdn.microsoft.com/en-us/library/8903062a.aspxDa hast Du Recht. Strings vom Typ "String^" werden mit dem Zuweisungsoperranden "=" kopiert!
Dann dürfte das der Einzigste Verwendungsfall für einen "%"-Tracking-Handle sein oder?Nein, bestimmt nicht.
Die Tracking Reference ist halt einfach eine Referenz.
Ev. hilft folgendes Bsp:ref struct V { V(int i) : _i(i) {} int _i; }; void f(V^ v) { v = gcnew V(1); } void g(V^% v) { v = gcnew V(1); } int main(array<System::String^>^ args) { V^ v = gcnew V(0); f(v); // v zeigt immer noch auf das in main(..) erstellte Objekt g(v); // v zeigt nun auf das in g(..) erstellte Objekt return 0; }
-
Ganz grob entspricht es einem "ref" Parameter in C#-