verschiedene Instantzierungen -> Unterschiede?



  • Hi,
    Ich habe beim "herumspielen" mit C++/CLI festgestellt das man Klassen auf verschiedene Weisen instantzieren kann:

    Kreis meinKreis(3.0);

    oder auch

    Kreis ^meinKreis=gcnew Kreis(3.0);

    der einzige unterscheid den ich feststellen konnte ware die Unterschiedle Syntax der Variablenaufrufe:

    meinKreis.Umfang

    meinKreis->Umfang

    gibt es noch einen bedeutenderen Unterschied?

    mfG

    Alex



  • Bei 1. wird automatisch Dispose() aufgerufen wenn das Objekt aus dem Scope geht (falls IDisposable implementiert ist).

    Simon



  • gehe ich recht in der Annahme das dispose() das gleiche macht wie der garbage colletor bei gcnew?

    Bin noch ein Anfänger bei C++/CLI.

    mfG

    Alex



  • Alex123 schrieb:

    gehe ich recht in der Annahme das dispose() das gleiche macht wie der garbage colletor bei gcnew?

    Bin noch ein Anfänger bei C++/CLI.

    mfG

    Alex

    Kann sein, muss aber nicht (hängt von der Impl. ab, bei C++/CLI ist das aber der Fall).
    Tatsache ist, dass wenn IDisposable (oder eben ein "Destruktor" bei C++/CLI) vorhanden ist, muss Dipose() aufgerufen werden (in C++/CLI entweder über die Schreibweise Nr. 1. oder mit gcnew / delete). Das muss geschehen sobald das Objekt nicht mehr benötigt wird.

    Hierzu noch einige Erklärungen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-242975-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html

    Simon



  • Variante 2 übrgibt die Speicherverwaltung an das .NET Framework, d.h. Wird der Speicher nicht mehr gebraucht, wird er automatiosch freigegeben. Man muß sich um nichts mehr kümmern.

    Klassendefinitionen müssen aber mit Ref erfolgen.

    Die Schweibweise ist sicherlich ungewohnt, wenn Du aber mehr mit .NET machen willst, solltest Du die Scheibweise nutzen



  • patricg schrieb:

    Variante 2 übrgibt die Speicherverwaltung an das .NET Framework, d.h. Wird der Speicher nicht mehr gebraucht, wird er automatiosch freigegeben. Man muß sich um nichts mehr kümmern.

    Klassendefinitionen müssen aber mit Ref erfolgen.

    Die Schweibweise ist sicherlich ungewohnt, wenn Du aber mehr mit .NET machen willst, solltest Du die Scheibweise nutzen

    Bei Variante 1. übernimmt auch die CLR die Speicherverwaltung.
    Es entspricht dem using bei C#.


Anmelden zum Antworten