Wie kann man hier effektive Verbesserungen vornehmen?
-
class new_ifstream : public fstream { public: new_ifstream(const char *name) { open(name, ios::in); } char operator [](long pos) { seekp(pos, ios_base::beg); get(sign); seekp(0, ios_base::beg); return sign; } private: char sign; };
-im Hinblick unberechtigter Indexzugriff (hatte das versucht ueber
Dateizeigerposition hatte gedacht Dateizeigerposition is vom Typ long?!!) scheint nicht zu gehen da "std::streampos" statt "long"- wie kriegt man WRITE - modus ueber den Indexoperator hin
meine Loesung wäre "Alle Zeichen => in vector => dann koennte
man Zeichen suchen und ueberschreiben => um dann Datei ueberschreiben mit
Inhalt des Vektorsmfg sclearscreen
-
Halte ich auch für den besten Weg.
1.von fstream erbt man nicht.
fstream * datei = new new_ifstream;
delete datei; // Wups, das klappt nicht so wirklich
Ich meine zu wissen das fstream keinen virtuellen destruktor hat.
2. fstream hat (und ich hoffe das is jetzt richtig) keinen randomaccessiterator (oder wie das teil heisst).
Somit wird die Implementierung evenutell langsamer als wenn man das in ein Array einliest (geht mit istreambuf_iterator und copy schnell) und dort Arbeitet. (Ok, bei megagrossen Dateien problematisch, aber da is auch Deine Art von OP[] kritisch
-
von fstream erbt man nicht
das funzt ich hab mehrere Sachen so gemacht die so funzen,
unteranderen ne Bruteforcen - Algorithmus so implementiert
um in Dateien Zeichenketten zu suchen!!!!!und das funktioniert alles ueber solche eine Verebung!!!!!!!!!!!
Hab natuerlich nicht mitgepostet das man fstream.h noch includieren muss!!!mfg sclearscreen
-
Hab nur mal den Stroustrup ueberblättert quer gelesen!
bin ganz Ohrmfg
-
Natürlich funzt das erstmal!!!!!!!!!!!!!!!!!!!!!!
Aber wenn du in der abgeleiteten Klasse Speicher reservierst, wird der nicht mehr richtig freigegeben, weil der Destruktor nicht virtuell ist!!!!!!!!!
Memory-Leak!!!!!!!!!!!!!
-
Ich reserviere Speicher (durch eigenes Implementierten Code im besagten Objekt)
==> ja dann muss ich nen Destruktor in meiner Klasse die von fstream erbt, schreiben
und sowas wiedelete ...;
einbauen
Es sei den fstream macht selbst intern irgendwas mit reservierten Speicher und hier
wirds problematisch dann gibts da was was ich noch nicht kenne!!!!!Und ansonsten intanziere ich besagt Objekte die bei mir von fstream geerbt haben ganz normal ohne hier "new" zu benutzen.
sollte ich da noch etwas mehr wissen?
mfg
-
Hallo,
eure Sorgen sind unbegründet. fstream (genau basic_fstream<char, char_traits<char> >) erbt von basic_iostream<char, char_traits<char> >. Diese Klasse besitzt einen virtuellen Destruktor. Einmal virtuell, immer virtuell.Ansonsten sind mir in diesem Beitrag zuviele aufeinanderfolgende Satzzeichen, als das ich mich weiter mit ihm beschäftigen möchte.
-
aber das stört mich nicht hab die Satzzeichen ohne Hintergedanken gemacht!
Danke trotzdem
-
HumeSikkins schrieb:
Hallo,
eure Sorgen sind unbegründet. fstream (genau basic_fstream<char, char_traits<char> >) erbt von basic_iostream<char, char_traits<char> >. Diese Klasse besitzt einen virtuellen Destruktor. Einmal virtuell, immer virtuell.Hubsa, man lernt nie aus
O