Unterschiede zwischen C++ und C++/CLI
-
C++/CLI ist eine Erweiterung von C++, mit der man Zugriff auf das .NET-Framework und ein paar weitere Sprachfeatures hat. Allerdings wird die Sprache von Microsoft immer weniger unterstützt, der Hauptanwendungszweck von C++/CLI ist Interop.
hustbaer hat vor einiger Zeit die Thematik recht ausführlich beschrieben, siehe hier.
-
Erstmal danke für alle Antworten .
Meiner Meinung nach ist CLI leichter zu lernen, was aber auch daran liegen kann, dass ich mir jetzt ein bisschen schwer tue mich auf C++ ohne .NET umzustellen. Beispielsweise habe ich schon wieder aufs Neue vergessen, wie man eine neue Instanz einer Klasse in C++ erstellt . Das ganze zu Mischen halte ich auch für keine gute Idee, da ich mich eben noch nicht sehr gut in C++ auskenne und so die Fehler praktisch schon "vorprogrammiert" sind .
-
Taeli schrieb:
Beispielsweise habe ich schon wieder aufs Neue vergessen, wie man eine neue Instanz einer Klasse in C++ erstellt .
Ist doch ganz einfach:
class foo { //... }; int main() { foo instance; //und schon hast du ne Instanz erstellt :D //... return 0; }
Und falls du gemeint hast wie man die Instanz auf dem Heap anlegt:
//Klasse siehe oben int main() { foo *instance = new foo(); //... delete instance; return 0; }
EDIT: Fehlerhafte Formatierung korigiert
-
Und dasselbe Beispiel noch in C++/CLI:
ref class foo { }; int main() { foo instance; //und schon hast du ne Instanz erstellt :D // ... return 0; }
Ist also von der Verwendung in diesem Fall genau gleich. Die Unterschiede machen sich aber bald bemerkbar:
//Klasse siehe oben int main() { foo ^instance = gcnew foo(); //... delete instance; return 0; }
Ich fands immer ganz angenehm.
-
Jonas OSDever schrieb:
C++ hat auch kein for each,
Jein. Für die STL wurde
for_each
implementiert.Ergänzung:
Im neuen Standard gibt esfor each
auch für andere Datenstrukturen:int main() { int bunny[] = {1,2,3,4,5}; for (int& i: bunny) std::cout << i; }
-
/rant/ schrieb:
//Klasse siehe oben int main() { foo ^instance = gcnew foo(); //... delete instance; //<-- ??? return 0; }
Ich dachte in C++/CLI gibt man die Sachen nich mehr selber, dass macht doch der GC?!
-
Ja, der GC kann alles übernehmen. Aber man kann in gewissen Situationen auch mit Auto-Semantik und
delete
programmieren, wenn man will. Darum mag ich die Sprache. Leider wird sie von Microsoft totgeschwiegen und gekillt.
-
[Rewind] schrieb:
Jonas OSDever schrieb:
C++ hat auch kein for each,
Jein. Für die STL wurde
for_each
implementiert.Ich bin von Schlüsselwörtern (und falls es foreach bei C++11 gibt: von C++03) ausgegangen.
-
Jonas OSDever schrieb:
Ich bin von Schlüsselwörtern (und falls es foreach bei C++11 gibt: von C++03) ausgegangen.
C++-foreach kommt ohne foreach-Schlüsselwort aus
-
Jonas OSDever schrieb:
/rant/ schrieb:
//Klasse siehe oben int main() { foo ^instance = gcnew foo(); //... delete instance; //<-- ??? return 0; }
Ich dachte in C++/CLI gibt man die Sachen nich mehr selber, dass macht doch der GC?!
delete in C++ und delete in C++/CLI macht nicht dasselbe!
In C++/CLI wird durch den delete Aufruf die Dispose() Methode aufgerufen (sofern vorhanden)!Hier noch was dazu:
http://www.c-plusplus.net/forum/242975-10
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ja, das ist klar. Es geht um die Semantik. Was in C++/CLI wie ein Destruktor aussieht, wird beim Kompilieren zu einem Dispose + compiler generated Finalizer. Der Operator delete ruft den IDisposable.Dispose auf dem Objekt auf, mit welchem Ressourcen freigegeben werden können. Am Ende gibt es einen Call GC::SuppressFinalize(this), wodurch der GC den Speicher beliebig reclaimen kann, da man die Arbeit ja bereits selbst gemacht hat