006
02.11.2016, 12:36 Uhr
ao
(Operator)
|
Zitat von ~somebody: |
Der String sollte dabei Member der Klasse sein, sonst zeigt der Pointer irgendwo hin, wo mal was war, aber nix mehr is.
|
"sonst zeigt der Pointer ...": Korrekter Einwand, genau das meinte ich mit "üble Kacke". @Joe: Verstehst du, was damit gemeint ist?
"Der String sollte Member der Klasse sein": Das ist unvereinbar mit "operator const char *(void) const": Der Operator darf das Objekt nicht verändern. Der mutable-Trick ist damit vermutlich auch ausgeschlossen. Außerdem ist der Operator dann nicht mehr reentrant, worauf zumindest hingewiesen werden muss.
Wie mans auch dreht und wendet, es läuft immer wieder drauf hinaus, dass eine Umwandlung in const char* Mist ist und dass eine Umwandlung in ein selbstverwaltetes std::string-Objekt wesentlich eleganter wäre.
So bleibt wohl nur, das aus Plain-old-C überlieferte "strdup-Paradigma" wiederzubeleben: Der Operator legt per new[] ein char-Array an, füllt es und reicht es dem Aufrufer raus. Der Aufrufer muss es nach Gebrauch delete'n, sonst Speicherleck. Kann man so definieren und ist für einen simplen ToString-Operator ein ziemlicher Overkill, aber nur so geht es sicher. Wie gesagt, blöde Aufgabe. Dieser Post wurde am 02.11.2016 um 12:53 Uhr von ao editiert. |