Integer to String ???
-
MIST xD
Sorry hab anstatt die String Variable ausversehen die Int Variable reingesteckt, es geht jetzt ^^ danke nochmal
-
Ich würde das so machen, dadurch hast Du alles auf dem Verwalteteb Heap.
In dem anderen Listing hast Du managed und unmanaged Code.
Natürlich können Programme aus einer Mischung von managed und unmanaged Code bestehen, dass gehört dann zum Guten oder Schlechten Programmierstil.
Der Unterschied besteht darin, dass die eine Variable auf dem Stack landet und die andere auf dem verwalteten Heap.
Die eine wird von der Garbage Collection verwaltet die andere nicht.
Hier nun mein Vorschlag.{ Int32 foo = 42; String^ bar = Convert::ToString(foo); // int in einen String umwandeln Int32 baz = Convert::ToInt32(bar); // string in ein int umwandeln }
System:: kannst Du weglassen, da das doch sicherlich als namespace vereinbart wurde.
Lässt sich so besser lesen.Gruß Melle
-
Ein Int auf dem verwalteten Heap? Nur wegen der Konsistenz, oder was soll das für Vorteile haben?!
-
Wo liegt denn da bitte ein int auf dem verwalteten Heap?
-
Melle hat dies behauptet, nicht ich
Aber es stimmt natürlich, dass Int32 ein Werttyp ist. Insofern sehe ich zwischen dem vorherigen Beispiel keinen Unterschied zu dem hier, oder resultiert die Verwendung von builtin-Datentypen wie int automatisch in der Generierung von Unmanaged Code? (Ich verwende C++/CLI so selten)
-
Der int liegt auf dem Stack und ist unmanaged.
Der Int16; Int32 oder Int64 liegt auf dem verwaltetn Heap.
So hat mir das mein Dozent reingehämmert.
Ich hab ihn damit richtig genervt.
Der int ist ISO C++ und die anderen 3 sind C++/CLIGruß Melle
-
Melle schrieb:
Der int liegt auf dem Stack und ist unmanaged.
Der Int16; Int32 oder Int64 liegt auf dem verwaltetn Heap.
So hat mir das mein Dozent reingehämmert.
Ich hab ihn damit richtig genervt.
Der int ist ISO C++ und die anderen 3 sind C++/CLI
Da der String^ in C++/CLI nur auf dem verwaltetn Heap abgelegt werden kann.
Das ist leicht zumerken, durch das Zeichen Dach ^.
Dadurch werden auch Zeiger auf den verwalteten Heap abgelegt und werden automatisch mit nullptr initialisiert.
Das hat den Vorteil, dass die durch die Garbage Collection (Müllabfuhr) verwalteten werde.
Das heißt, sobald der Zeiger nicht mehr benötigt wird, wird der Speicher wieder automatisch freigegeben und muss nicht mit delete selber Freigegeben werden.
Der Arbeitsspeicher kann auch fragmentieren.
Wie schon gesagt, dass ist der persönliche Stil.
Ich bervorzuge die Garbage Collection nicht weil die neu ist.
Ich finde die Freigabe des Arbeitsspeichers sehr nützlich, die gibt es nämlich in ISO C++ so nicht.
Die Garbage Collection soll auch wirklich funzen.Musste mich selber Zitieren wollt noch ein bischen mehr schreiben.
Gruß Melle
-
Da hinter Int32 auch in Deinem Beispiel kein Dach ist, wird der Wert genauso wie ein builtin-int nicht auf dem verwalteten Heap abgelegt. Darüberhinaus hielte ich es auch für höchst ineffizient, Werte, deren Storage kleiner ist als die einer verwalteten Referenz (Zeiger, Refcounter usw. liegen auch irgendwo rum) auf dem Heap anzulegen. Man muss die Performance ja auch nicht verschwenden
Nicht zuletzt liegen selbst in den reinen .NET-Sprachen (C#) Werttypen auf dem Stack.
-
Es liegt *nur* etwas auf dem Heap, wenn es ein ^ hat!!!
Also
Int32 i;
und
int i;
ist gleichbedeutend und hat nix mit dem Heap zu tun.
Genauso:
Object o;
liegt auch nicht auf dem Heap!
-
Guckst Du hier
http://msdn2.microsoft.com/de-de/library/ms235267(VS.80).aspx
Dann erkläre uns doch mal bitte den Unterschied zwischen...
Double und double
Boolean und boolusw....
-
Guckst Du da weita...
http://download.microsoft.com/download/9/2/3/923d72fb-0076-49b6-96c4-aac1c255a60e/2023_S87_126OK.pdf
-
Melle schrieb:
Guckst Du da weita...
http://download.microsoft.com/download/9/2/3/923d72fb-0076-49b6-96c4-aac1c255a60e/2023_S87_126OK.pdf
Gelesen?
Um den
Unterschied zwischen Verweis- und Wertetypen zu verstehen –
eine grundlegende Unterscheidung im CTS –, müssen Sie
zunächst wissen, wie den Instanzen der einzelnen Typen Speicher
zugeordnet wird. Im verwalteten Code gibt es dafür zwei Möglichkeiten1:
auf dem Stack oder auf dem Heap, die beide von der
CLR verwaltet werden.
-
Und was hat das mit dem Unterschied zwischen "Double" und "double" zu tun???
System::Double == double
System::Float == float
System::Boolean == bool
(und das gilt natürlich noch für viele andere Typen...)
-
Toller Unterschied.
Leuchtet mir ein.
Was willst Du mir damit sagen
Danke.
-
Melle schrieb:
Toller Unterschied.
Leuchtet mir ein.
Was willst Du mir damit sagen
Danke.An wen gerichtet?
Du hast behauptet, dass Int32 auf dem Heap liegen würde, bringst dann selbst Papers, die aussagen, das sie auf dem Stack liegen.
-
Reicht das???
Variablen und referenzierende .NET Typen
Referenzierende .NET Typen werden grundsätzlich auf der vom Garbage Collector verwalteten Halde angelegt. Ebenso grundsätzlich kann es keine Variablen eines referenzierenden Typs geben. Das bedeutet, dass die folgende Zeile nicht korrekt compiliert werden kann:http://www.microsoft.com/germany/msdn/library/net/cplusplus/CPlusPlusManagedExtensions.mspx?mfr=true
Siehe unter...
"Variablen und referenzierende .NET Typen"
-
Ich glaube Du hast irgendwas nicht ganz verstanden...
In C++/CLI kann man anhand des Datentyp überhaupt nicht feststellen, wo dieser liegt!!!
Du kannst sowohl ein ref-object auf dem Stack anlegen als auch ein Value-Object auf dem Heap!Also, nochmals: Der Datentyp spielt in C++/CLI *gar keine Rolle*!!!
Das *einzige* was zählt ist: Wie wurde die Variable deklariert:
Stack:
Int32 i1; int i2; bool b: DateTime dt; StreamWriter sw;
Heap (also GC verwaltet):
Int32 ^i1; int ^i2; bool ^b: DateTime ^dt; StreamWriter ^sw;
-
So nun nochmal.
Guckst Du Seite 3
http://www.courseptr.com/downloads/bonus/009638_BonusCh02.pdf
Und nun sag nicht wieder das ist alles gleich wenn nicht sogar das gleiche.
-
Melle schrieb:
So nun nochmal.
Guckst Du Seite 3
http://www.courseptr.com/downloads/bonus/009638_BonusCh02.pdf
Und nun sag nicht wieder das ist alles gleich wenn nicht sogar das gleiche.Ach ja und mit dem Dach ^ legst Du eine Handle an.
Nur so nebenbei.
-
Ja, ein Handle auf den verwalteten Heap. Ergo kann etwas was kein Handle ist nicht auf dem verwalteten Heap landen.
Nebenbei: Int32 ist kein referenzierender Typ, und "managed" bedeutet nicht zwangsläufig "referenced".