Frage zu den alten C-Strings und Speicherleck



  • Hallo, ich lerne gerade C++ mit dem Primer. Dort bin ich jetzt beim Kapitel, wo es um die C-Strings geht.
    Wie hat man früher, als es nur c-strings gab, das Problem mit den Speicherlecks gelöst 😕 zB Folgende Funktion

    std::string do_something()
    {
        std::string tmp;
        //string bearbeiten
        return tmp; //kein speicherleck
    }
    
    const char* do_something()
    {
        char* tmp = new char[x];
        //tmp bearbeiten
        return tmp; //Speicherleck
    }
    

    Wurde damals vom Benutzer erwatet, dass er den Zeiger, den do_something zurückgibt, zwischenspeichert und per hand freigibt? Oder welches Konzept hat man damals verwendet?



  • Wenn man ungefähr weiß, wie groß der String wird, macht man das so:

    char *do_sth(char *dest, size_t dest_size)
    {
    	//...
    	return dest;
    }
    
    ..
    
    char buf[256]
    do_sth(buf, 256);
    


  • Oder, was in vielen C-APIs verwendet wird: Man hat zusammengehörige Anforderungs- und Freigabefunktionen. Also eine Art Konstruktoren und Destruktoren, welche man aber manuell aufrufen muss.

    Surface* MySurface = CreateSurface(12, "text");
    // arbeite mit MySurface
    DestroySurface(MySurface);
    

Anmelden zum Antworten