Was bedeutet ^?



  • Hallo,

    was bedeutet folgendes:
    array<String>row0=....;

    Speziell das ^.

    Gruß
    Boris



  • Das bedeutet, daß du vermutlich mit C++/CLI arbeitest - ^ kennzeichnet afair managed Pointers (im Gegensatz zu * für 'normale' Zeiger).



  • Ok, dann erkläre mir doch bitte noch kurz "managed Pointers". Danke!



  • Ich hab' eine bessere Idee - ich schicke dich rüber ins richtige Board, dort können sich die Experten mit der Frage beschäftigen.
    (mein Wissen über .NET und C++/CLI beschränkt sich darauf, daß es das gibt)



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • http://de.wikipedia.org/wiki/C%2B%2B/CLI
    Spieziell der Absatz "Objektzeiger"



  • Primär geht es darum, dass du dich bei ^-Zeigern nicht um die Freigabe der Objekte kümmern musst, sondern die Verantwortung für den Speicher dem Garbage Collector überlässt. Dies ist eine der Voraussetzungen, um eine riesige Bibliothek wie das .Net-Framework überhaupt sinnvoll nutzen zu können. Also:

    int main()
    {
        Typ *Foo = new Typ;
        Typ ^Bar = gcnew Typ;
    
        delete Foo; // das solltest du immer tun, sonst hast du ein speicherleck
        delete Bar; // du bist nicht "verpflichtet", das zu tun. normalerweise macht das der garbage collector sobald er es für nötig befindet.
    }
    


  • An der Stelle noch der Hinweis auf die Destruktoren:

    ~Typ()
    !Typ()

    Wenn der GC aufräumt, wird !Typ() aufgerufen,w enn man delete verwendet ~Typ().

    Es bietet sich also an:

    ~Typ()
    {
      this->!Typ();
    }
    


  • Das "^" ist also oft ein fester Bestandteil des Codes- habt ihr denn dann eine Idee, warum das dann bei diesem Beispiel nicht funktioniert und er mir bei dem ^ einen Syntaxfehler vorwirft:

    cli:array<int>^ SetzeINTEGER(cli:array<VERWALTUNG> main, String^ name, int wert, int dimension1 = -1, int dimension2 = -1, int dimension3 = -1) 
    { 
    ... 
    }
    

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-165542.html

    ich weiss das ist eine ganz bloede Art sich so in andere Threads einzuschleichen- der hier ist aber halt nun mal der aktuelle und ich brauche da wirklich eure Hilfe- desshalb bitte verzeiht mir diese Unverschaemtheit und guckt noch mal in dem Thread vorbei- das waere unglaublich lieb von euch!! 😉



  • Referat über Elefanten:

    Die Maus ist, wie der Elefant , ein Säugetier.
    Die Maus.....



  • Braunschweiger schrieb:

    cli:array<int>^ SetzeINTEGER(cli:array<VERWALTUNG> main, String^ name, int wert, int dimension1 = -1, int dimension2 = -1, int dimension3 = -1) 
    { 
    ... 
    }
    

    Du kannst cli::array<VERWALTUNG> main nicht per Wert übergeben, es muss cli::array<VERWALTUNG> ^main heissen. Dann hast du allerdings noch das Problem, dass "main" für den Compiler der Name der "main"-Funktion ist. Darum erkennt er das falsch. Wähle einen anderen Namen...

    Noch ein Tipp: VERWALTUNG ist ein value struct mit Referenzen. Eine solche Konstruktion sollte man sich genau überlegen. Du solltest vielleicht in Erwägung ziehen, eine ref class zu benutzen.

    Knuddlbaer schrieb:

    Referat über Elefanten:
    Die Maus ist, wie der Elefant , ein Säugetier.
    Die Maus.....

    Sehr interessant, aber was soll das bedeuten?



  • Sehr interessant, aber was soll das bedeuten?
    

    Das sollte der Wink mit dem Zaunpfahl sein, das er einen eigenen Thread hat und sich mit einem

    "Das ^ ist ein so ofter Bestandteil des Quellcodes" als Begründung mal eben einen Crosspost erzeugt hat:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-165542-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html

    So wird jeder, der seinen Beitrag beobachtet um eine Lösung zu bekommen, nie diese Erfahren, weil die Antwort auf die Frage in einem völlig anderen Thread steht.



  • Hallo Leute,

    ich habe in meiner Anwendung da Problem, dass diese immer mehr Speicher beansprucht. So nach ca. 5 Wochen Dauerlauf ist der Ofen aus, das System bleibt sehen.

    Ich habe lange im Internet nach passenden Antworten gesucht, bin aber noch nicht so richtig fündig geworden.

    Mit dem PerfMon habe ich mal die folgenden Werte überwacht:

    1 Prozess/Private Bytes
    2 .NET CLR-Speicher/Anzahl der Bytes in den Heaps
    3 .NET CLR-Sperren und -Threads/Anzahl der aktuellen logischen Threads.
    4 Auflistungsanzahl der Generation 0
    5 Auflistungsanzahl der Generation 1

    Ich habe festgstellt, dass die Werte von Punkt 4 und 5 kontinuirlich ab Programmstart wachsen.

    Also habe ich mal einen Test mit einem ganz einfachen Programm gemacht. Ich öffne mittels Button und StreamReader eine Datei und weise die Zeile aus dem StreamReader einem String zu. Danach wird der StreamReader wieder geschlossen.

    Hier der kurze Code:

    private: System::Void buttonSTartTest_Click(System::Object^  sender, System::EventArgs^  e) {
    
    				 String ^tempString="";
    				 StreamReader ^sReader=gcnew StreamReader("C:\\Test.log");
    
    				 while(sReader->EndOfStream!=true){
    					 tempString=sReader->ReadLine();
    				 }
    				 sReader->Close();
    			 }
    

    Ist nicht besonders sinnvoll, ich weiß, aber es geht ja um das daraus resultierende Problem.

    Wenn ich jetzt den Button so einige Male anklicke wächst der Wert von "Auflistungsanzahl der Generation 0" mit jedem Klick und fällt nicht wieder zurück.

    Das kann doch so nicht richtig sein, oder?



  • Ich kann da nicht wirklich was dazu sagen, da ich erst mit VS 2008 begonnen habe.
    Aber was mir merkwürdig erscheint ist, daß die Speicherauslastung auch steigt, wenn man nur ein einfaches Fenster erstellt (ohne etwas darauf), es startet und nur die Maus darüber bewegt. (siehe im TaskManager).
    Ich benutze normalerweise BCB2007 und da ist es definitiv nicht !
    Keine Ahnung warum das so ist. 😕


Anmelden zum Antworten