Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

1

17.09.2009, 14:09

Statische Variablen und Konstruktoren

Jo hi,

also es geht um folgenden code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using namespace std;

class Register
{
public:
    Register()
    {
        cout << "Hallo hahah";
    }
};



class test
{
    static Register reg;
};
Register test::reg = Register();



int main()
{
    cin.get();

    return 0;
}


In der main wird ja nix weiter gemacht außer auf nen Tastendruck gewartet.
So da aber die Statische Variable "reg" angelgt wird, wird der Konstructor von
"Register" aufgerufen. Dieser wiederrum gib eine Nachricht aus.
Das Funktioniert auch alles...
Frage ist jetzt nur, ob man sich das zu nutze machen sollte, um
zum beispiel von anfang an alle Klassen zu registrieren oder so ?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

17.09.2009, 14:14

uh also das klingt meines erachtens schon etwas krank nur um vllt per hand alle objekte zu erzeugen :D. nach meinem wissensstand ist es des compilers sache mit dem static, ich würde es nicht sehr elegant finden, allein das debuggen ist ne hölle wenns schief geht.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

17.09.2009, 14:20

Das kann man ohne weiteres machen und es geht auch so lange gut bis die statischen Objekte untereinander irgendwelche Abhängigkeiten haben. Die Reihenfolge in der die statischen Konstruktoren aufgerufen wenn die Objekte in verschiedenen cpp Dateien definiert sind ist nämlich nicht definiert. Da musst du also aufpassen...

4

17.09.2009, 14:40

dot hat ja schon den Kritikpunkt angesprochen der mir auch gerade dabei kam.
Wenn es Abhängigkeiten untereinander gibt kann das zu Problemen führen, deshalt würde ich da auch aufpassen.

5

17.09.2009, 20:39

Re: Statische Variablen und Konstruktoren

Zitat von »"Databyte"«

Frage ist jetzt nur, ob man sich das zu nutze machen sollte, um
zum beispiel von anfang an alle Klassen zu registrieren oder so ?
Wie stellst du dir das konkret vor? Falls du etwas in Richtung Logging-Ausgaben erzielen möchtest, fände ich den Konstruktor geeigneter.

Normalerweise haben statische Instanzen keinen entscheidenden Vorteil. Meist ist es besser, man erstellt die Objekte erst, wenn man sie braucht (nicht zuletzt wegen der Abhängigkeiten). Dann kann man auch eine dafür zuständige Klasse festlegen und das nicht einfach dem globalen Initialisierer überlassen.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

6

17.09.2009, 21:13

in c# sind ja direkt statische konstruktoren erlaubt. ist da auch undefiniertes verhalten wegen der reihenfolge?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

17.09.2009, 21:39

Zitat von »"TrommlBomml"«

in c# sind ja direkt statische konstruktoren erlaubt. ist da auch undefiniertes verhalten wegen der reihenfolge?


Naja, die lösen im Prinzip das Problem da garantiert ist dass der statische Konstruktor ausgeführt wird bevor die Klasse das erste mal referenziert wird. Wann das genau passiert ist alllerdigns undefiniert (Programmstart, 5min. vor Mitternacht, ... es ist halt nur garantiert dass es vor dem ersten mal da die Klasse referenziert wird passiert, nicht aber wann genau vorher).

Werbeanzeige