Hallo @hmm,
class Bla { public: static std::string a; static std::char* b; ~Bla() { printf(a); printf(b); } } Bla;
std::char
brauchst du nicht,char
reicht. (War mir neu, dass das überhaupt funktioniert.)- Was macht denn das
Bla
nach dem Ende der Klassendefinition? - Welchen Zweck hat die Klasse, wenn es keine sinnvollen Objekte davon gibt? Deine
static
-Attribute sind Klassenattribute, keine Klassenattribute. - Du verwendest
printf
in einer unsicheren Variante: Sobalda
oderb
einen Formatstring enthalten, greifst du auf undefinierten Speicher zu. Nimm liebercout
oderputs
. - Warum definiert die Klasse als einzige Methode den Destruktor?
std::string Bla::a = ""; std::char* Bla::b = ""; irgendEinKlasse::FunktionDieAufgerufenWird() { Bla::a = "test"; Bla::b = "test"; }
wenn ich das mache so ist im Destruktor ~Bla a="" und b="test".
woran liegt das?
Ich vermute, dass von a
der Destruktor aufgerufen wird. b
ist als Pointer auf einen char
definiert, also „herkömmliches C“, da funktioniert die Speicherverwaltung anders.
Mein Ziel wäre es, später in irgendEinKlasse::FunktionDieAufgerufenWird() anstelle eine std::string ein eigenes kompliziertes datenobjekt zu setzen und dass dann im destruktor abzufragen... aber dafür muss ich erstmal verstehen wie ich machen kann das std::string a seinen wert behält.
Dann schau dir mal, wie ein Objekt mit seinen Attributen „zerstört“ wird, sprich in welcher Reihenfolge die Destruktoren aufgerufen werden.
Ein std::string
ist übrigens auch ein „kompliziertes Datenobjekt“ ;)
Viele Grüße
Robert