2017-04-20 7 views
1

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?

+0

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

+1

@Default In C# beziehen wir uns in der Regel auf sie als "Referenztypen" und "Werttypen" – BradleyDotNET

+0

@BradleyDotNET, das ist definitiv eine bessere Formulierung! (zu spät zum Bearbeiten) – Default

Antwort

1

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.

+0

C# verwendet Garbage Collection, nicht Referenzzählung. – SLaks

+0

"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? –

+0

@SLaks Meine Entschuldigung, anscheinend verwendet das Framework tatsächlich eine Art anderer Algorithmus – BradleyDotNET

2

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.

+0

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). –

+0

Im obigen Code wird 'shared_ptr' automatisch den Speicher freigeben. –

+0

Ah, ich wollte @Gernet einen Kommentar hinzufügen! Ich entschuldige mich, wenn es mehrdeutig war. –

Verwandte Themen