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 Funktionstd::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);