problem mit ifstream



  • 314159265358979 schrieb:

    Wo willst du denn da Leaks bekommen?

    Wenn du mal nicht nur auf deine reflexauslösenden Schlüsselwörter reagieren, sondern den Thread auch mal genau lesen würdest, würdest du sehen, dass man hier für RAII einen Smartpointer braucht.



  • Du hast Recht, habe mir nur den Code im Thread angesehen. Sorry.



  • 314159265358979 schrieb:

    Mögen die Leute endlich lernen, dass Streams RAII können. Ist ja schrecklich.

    was ist damit gemeint?
    was hat das mit meinem Problem zu tun?

    wenn damit gemeint ist, dass ich einen Stream auch nur für eine Datei benutzten sollte, dürfte die Klasse kein open und close anbieten.



  • vlad_tepesch schrieb:

    314159265358979 schrieb:

    Mögen die Leute endlich lernen, dass Streams RAII können. Ist ja schrecklich.

    was ist damit gemeint?
    was hat das mit meinem Problem zu tun?

    wenn damit gemeint ist, dass ich einen Stream auch nur für eine Datei benutzten sollte, dürfte die Klasse kein open und close anbieten.

    Ich finde auch, Du solltest open und close gar nicht benutzen.

    Um die Stream-Variable lokaler zu machen, setze ich einen eigenen Block.



  • Hab ich das jetzt richtig verstanden und man solte es so machen?

    int main() {
        {
        	std::ifstream file("test.txt");
    		std::string line;
    		while( std::getline(file, line) )
    		{
    		  std::cout << line << '\n';
    		}
    
    		std::cout << '\n';
        }
    
        {
        	std::ifstream file("test.txt");
    		std::string line;
    		while( std::getline(file, line) )
    		{
    		  std::cout << line << '\n';
    		}
    
    		std::cout << '\n';
        }
    
        return 0;
    }
    


  • Du hast Volkard teilweise richtig verstanden, allerdings sagte er nicht, dass "man" es so tun sollte, sondern nur, dass er es so macht.



  • Upps, das hab ich irgendwie überlesen. Mann, ich lese man eigentlich überall. Doofes Wort.

    Aber wieso meint volkard denn eigentlich, Stream Variablen so lokal wie möglich zu halten und auf open() bspw. close() zu verzichten?



  • Ich für meinen Teil tue sowas, weil das unabhängige Verwenden ein und desselben Objekts immer dazu führt, dass man an mehreren Stellen etwas anpassen muss, nur weil man an einer Stelle etwas verändert. Und man sieht die Unabhängigkeit auch viel besser 😉 Ich denke nicht einmal, dass es hier ansonsten irgendeinen technischen Vorteil gäbe.



  • Decimad schrieb:

    Du hast Volkard teilweise richtig verstanden, allerdings sagte er nicht, dass "man" es so tun sollte, sondern nur, dass er es so macht.

    Meine Schuld. Ich schrieb "man" und habe es dann zu "ich" verbessert.



  • Also eine reine Stilfrage. Okay, dass wollte ich noch wissen.

    EDIT: Wie kann man "man" zu "ich" verbessern? Das ist doch unlogisch..? 😃



  • Incocnito schrieb:

    Aber wieso meint volkard denn eigentlich, Stream Variablen so lokal wie möglich zu halten und auf open() bspw. close() zu verzichten?

    Lokal halten: Brauche kein close zu machen, kann nicht aus Versehen später einen geclosedten Stream benutzen, und hübscher ist es auch, finde ich.
    open ist eh für die Füße, weil der Konstruktor das auch kann. Und auch hier kann ich nicht aus Versehen auf einen noch nicht offenen Stream zugreifen.

    Und vor allem sind meine Klassen alle ohne open/close, sondern nur mit Konstruktor/Destruktor. Da mache ich es mit streams einfach auch so.



  • Incocnito schrieb:

    Wie kann man "man" zu "ich" verbessern? Das ist doch unlogisch..? 😃

    Die Frage ist eher:
    Wie kann ich "man" zu "ich verbessern? Ups, ich habe es schon wieder getan. Ich bin Wiederholungstäter. Siehste, so leicht passiert das. 🤡


Anmelden zum Antworten