Frage zu Quelltext



  • class tSafeString // String-Klasse mit abgesichertem Index
    {
    public:
        tSafeString(int len) // Max. Länge muss vorgegeben werden
        {
            maxLen = len;
            safestr = new char[len]; // Externe Speicheranforderung
            mist = 0; // Dummy
        }
        ~tSafeString()
        {
            delete[] safestr;
            safestr=0;
        }
        char& operator[](int i);
        // In einer realen Klasse müsste auch ein Kopierkonstruktor
        // und ein Zuweisungsoperator implementiert werden.
    private:
        char *safestr; // der String ist extern!
        char mist;     // Dummy fuer Fehlzugriffe
        int maxLen;
    };
    

    was bedeutet denn char* safestr ; // der string ist extern
    und oben auch safestr = new char[len]; // Externe Speicheranforderung



  • Das ist aber ein schlechtes Buch.
    Ah, schon wieder gallileo computing.
    Fein, dann gibt es ja ein gemeinsames Muster, an dem man außergewöhnliche Bücher erkennt. 🙂

    class tSafeString //Präfix t ohne besondere Bedeutung, Erbe von Borland?
    { 
    public: 
        tSafeString(int len) //size_t statt int
        { 
            maxLen = len; 
            safestr = new char[len]; // Externe Speicheranforderung 
            mist = 0; // Dummy //lol. Erst den dummy mist nennen, um dann 
    //per Kommentar ihn wieder dummy zu nennen. Warum nicht 
    //gleich dummy?
        } 
        ~tSafeString() 
        { 
            delete[] safestr; 
            safestr=0; // absolut wirkungslose Augenwischerei
        } 
        char& operator[](int i); 
        // In einer realen Klasse müsste auch ein Kopierkonstruktor 
        // und ein Zuweisungsoperator implementiert werden. 
    private: 
        char *safestr; // der String ist extern! 
    //extern ist ein C++-Schlüsselwort und sollte hier nicht verwendet werden, 
    //denn jeder nimmt erstmal die Schlüsselwortbedeutung an. 
        char mist;     // Dummy fuer Fehlzugriffe 
    //Fehlzugriffe stillschweigend zu unterdrücken wird sicher nicht 
    //dafür sorgen, daß man Programmierfehler findet. 
        int maxLen; 
    };
    

    Ich wollte Dir gerade ein Tutorial raussuchen, wo was über Zeiger und new in C++ steht, aber mein Nameserver scheint abzukacken und ich komme nicht raus auf neue Seiten.

    extern meint hier, daß der Speicher nicht im tSafeString-Objekt liegt, sondern woanders, auf dem sogenannten Freispeicher. safestr zeigt nur dorthin. new[] belegt dort Speicher und delete[] würde ihn wieder freigeben.



  • char mist;     // Dummy fuer Fehlzugriffe
    

    Wozu braucht man da noch The Daily WTF? 😃



  • Bashar schrieb:

    char mist;     // Dummy fuer Fehlzugriffe
    

    Wozu braucht man da noch The Daily WTF? 😃

    Um die immer wieder selben doofen Witze in den Kommentaren zu lesen? Um konstruierte Texte zu lesen die künstlich aufgebauscht wurden, um wenigstens etwas Content zu liefern? 😉



  • aha. also wenn ich mir sizeof(Safestring) anzeigen lassen würde,
    wäre der speicher darin nicht enthalten?



  • blurry333 schrieb:

    aha. also wenn ich mir sizeof(Safestring) anzeigen lassen würde,
    wäre der speicher darin nicht enthalten?

    Genau.

    char *safestr; //4 Byte, denn 32-Bit-Adressen hasben 4 Byte, egal auf was sie zeigen
    char mist;     //1 Byte
    int maxLen; //4 Byte
    

    Macht zusammen 12.


Anmelden zum Antworten