Lokale Statische Variable in Methode?
-
Hi
mich interessiert folgendes:
class test { public: void tester() { static bool testb = false; // ... } }wird die Variable testb nun für jede Instanz von test neu alloziert oder gilt über alle Instanzen der Klasse test testb als eine Variable.
In VC++ funktioniert es anscheinend wie ichs mir dachte (Pro Instanz alloziert) aber kann man darauf bauen? Oder sollte ich generell so vorgehen:
class test { private: bool testb; test() { testb = false }; public: void tester() { // ... }; }Hab leider nix dazu in meiner C++ Referenz gefunden.
-
Huhu !
Die zweite Methode ist zu empfehlen.
Ja und jede Instanz hat ihre eigene testb Variable.
-
DaRpH schrieb:
Hi
mich interessiert folgendes:
class test { public: void tester() { static bool testb = false; // ... } }wird die Variable testb nun für jede Instanz von test neu alloziert oder gilt über alle Instanzen der Klasse test testb als eine Variable.
In VC++ funktioniert es anscheinend wie ichs mir dachte (Pro Instanz alloziert) aber kann man darauf bauen? Oder sollte ich generell so vorgehen:
class test { private: bool testb; test() { testb = false }; public: void tester() { // ... }; }Hab leider nix dazu in meiner C++ Referenz gefunden.
Hi, beides ist ein großer Unterschied. Es kommt darauf an was du genau machen willst ...
-
ich will mir merken das ein timeout in der ner read funktion aufgetreten ist (diese wird im takt aufgerufen)
-
testb ist ja static, gar nicht gesehen...
naja ... ich denke mal, das in beiden Fällen das Objekt von der Klasse test
existieren muss.Nunja, im ersten Fall bräuchtest du wohl noch einen Übergabeparameter für tester().
Und im zweiten eine set_testb Methode.
-
Was fürn Müll ...
class test { public: void test_it() { static bool failed = false; // ... } }so ... und willst du jetzt dir ausgeben lassen können ob failed wahr ist? dann wäre static wohl ein eher schlechter Ansatz.
-
Statische Variablen in nichtstatischen Memberfunktionen sollten für alle Instanzen gelten und nicht in jeder neuen Instanz neu initialisiert werden.
-
Hm also irgendwie bringt das auch keine Klärung "sollte", "könnte" etc soweit war ich auch schon.
Es geht doch im Prinzip darum das ich die bool Variable nur in der Funktion benötige (da sie von niemand anderem genutzt wird). Daher währe sie meiner Meinung nach in der Klasse falsch untergebracht.
Nun will ich aber sichergehen das pro Instanz der Klasse die Variable neu alloziert wird. (dH pro Klasse eine tester() Funktion mit jeweils einem eigenem Speicherbereich für die lokale Variable)
-
Nur mal überlegen.
Eine statische Variable in einer Funktion gibt es nur einmal und wird beim ersten Aufruf der Funktion initialisiert.
Eine Memberfunktion ist auch nur eine Funktion. Sie ist im Scope der Klasse gültig. Sie wird aber nicht für jede Instanz neu erzeugt.
Ergo müssen hier Memberfunktionen wie freie Funktionen behandelt werden und somit gibt es die statische Variable wie gehabt nur einmal.
-
Einfachste Lösung: Probier's aus

Zur Erklärung: Statische Variablen gelten pro Funktion (bzw. pro Methode), das heißt daß auch alle deine Objekte mit der physisch selben Variablen rechnen müssen. Wenn du einen Wert pro Klasseninstanz brauchst, mußt du den in der Klasse anlegen.
PS: Natürlich kannst du auch folgende Alternative nehmen, aber ob die besser aussieht

void MyClass::test() { static map<MyClass*,bool> failed_data; bool failed = failed_data[this]; ... }
-
Ah danke das ist doch mal eine klare Aussage

Mir kams halt so vor als obs in meinem Testprogramm so funktioniert. Anscheinend glücklicher Zufall...