C#C++ C# equivaltent Objektinstanz
MyClass myClass = new MyClass();
C++
MyClass* myClass = new MyClass();
Ist der C# -Code intern equivaltent an den C++ Code? Ist die myClass intern in C# -Code der Referent oder ein Zeiger?
C#C++ C# equivaltent Objektinstanz
MyClass myClass = new MyClass();
C++
MyClass* myClass = new MyClass();
Ist der C# -Code intern equivaltent an den C++ Code? Ist die myClass intern in C# -Code der Referent oder ein Zeiger?
Sie sind nicht genau gleichwertig, da C# -Objekte vom Garbage Collector (MSDN) verfolgt werden. Um ähnliche Funktionalität in C++ zu erhalten, müssten Sie eine shared_ptr
verwenden.
Vom Standpunkt der mit sie jedoch die gleichen Konzepte gelten. Änderungen durch einen Bezug genommen werden auf andere Referenzen propagieren, dass „Punkt“ auf dasselbe Objekt usw.
C# verwendet Garbage Collection, nicht Referenzzählung. – SLaks
"Referenzen sind im Grunde nur Zeiger". Du meinst intern, richtig, denn eine Referenz ist const und semantisch sollte sie auch anders verwendet werden? "In C++ wäre ein auto_ptr grundsätzlich gleich". Du schreibst grundsätzlich, das irritiert mich. Ist in C# die myClass nun eine semantische Referenz oder ein Zeiger/shared_ptr? –
@SLaks Meine Entschuldigung, anscheinend verwendet das Framework tatsächlich eine Art anderer Algorithmus – BradleyDotNET
Eine genauere Weise die Absicht dieses C# Code
var myClass = new MyClass();
in C auszudrücken ++ sein könnte
(oder vielleicht std::shared_ptr<MyClass> myClass(new MyClass());
).
Natürlich, C# verwendet etwas vollständig anders als std::shared_ptr
(Garbage Collection), aber was ein Programmierer sieht, ist weitgehend die gleichen — zumindest für dieses sehr einfaches Beispiel.
Ihr ursprünglicher C++ - Code erzeugt ein Speicherleck, das in C# nicht so leicht passieren kann.
Außerdem ist der große Unterschied, dass Sie den zugewiesenen Speicher in C++ (MANUAL) entfernen müssen, aber C# verwaltet den zugewiesenen Speicher (AUTOMATIC). –
Im obigen Code wird 'shared_ptr' automatisch den Speicher freigeben. –
Ah, ich wollte @Gernet einen Kommentar hinzufügen! Ich entschuldige mich, wenn es mehrdeutig war. –
Ich bin mir nicht sicher, ob Sie sie so vergleichen sollten. Sehr grob, in C++ haben Sie Referenzen, Zeiger und Werte (die ich kenne), in C# haben Sie Klassen und Strukturen. Sie sollten lernen, sie alle entsprechend zu verwenden. Sie haben alle unterschiedliche Verwendungszwecke – Default
@Default In C# beziehen wir uns in der Regel auf sie als "Referenztypen" und "Werttypen" – BradleyDotNET
@BradleyDotNET, das ist definitiv eine bessere Formulierung! (zu spät zum Bearbeiten) – Default