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 FehlzugriffeWozu braucht man da noch The Daily WTF?

-
Bashar schrieb:
char mist; // Dummy fuer FehlzugriffeWozu 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 ByteMacht zusammen 12.