Statischen variable in einem Konstruktor, gibt es irgendwelche Nachteile oder Nebenwirkungen?

Was ich will: führen Sie einige Voraussetzung-code, wenn Instanz der Klasse verwendet wird, innerhalb eines Programms. Dieser code prüft, ob requiremts etc. und sollte nur einmal ausgeführt werden.

Fand ich, dass dies erreicht werden kann, mit einem anderen Objekt als statische variable in einem Konstruktor. Hier ist ein Beispiel für ein besseres Bild:

class Prerequisites
{
     public:
         Prerequisites() {
              std::cout << "checking requirements of C, ";
              std::cout << "registering C in dictionary, etc." << std::endl;
         }
};


class C
{
    public:
         C() {
             static Prerequisites prerequisites;
             std::cout << "normal initialization of C object" << std::endl;
         }
};

Was mich stört ist, dass ich habe nicht gesehen, eine ähnliche Verwendung von statischen Variablen so weit. Gibt es irgendwelche Nachteile oder Nebenwirkungen, oder bin ich etwas fehlt? Oder gibt es vielleicht eine bessere Lösung? Alle Vorschläge sind willkommen.

  • Ich denke, Sie sollten überdenken Sie Ihren Entwurf, indem Sie stattdessen das nehmen, was prereq als argument an den Konstruktor übergeben. Es macht die Abhängigkeiten klarer für den Benutzer der Klasse.
  • K: Das ist nicht etwa eine Wahl der Klasse user aber eher zu Test-runtime-Umgebung. Um genauer zu sein, möchte ich beispielsweise überprüfen, nach verfügbaren OpenGL-Erweiterungen, die C-Klasse. Wenn die erforderlichen Erweiterungen nicht verfügbar, das Programm wird einfach drucken Fehlermeldung aus und beendet sich mit Fehler.
  • Was ich meinte war ein Benutzer (Programmierer) mit Ihrer Klasse. Es ist klar, wenn der Konstruktor muss wissen, die verfügbaren opengl-Erweiterungen dann leise hinter den kulissen.
  • K: ich weiß was du meinst, aber das ist nicht der Fall. Class user (Programmierer) hat keine Ahnung, was C Klasse können müssen, da es im detail. Auf der anderen Seite C-Klasse weiß, was es braucht, sondern weil der OpenGL-design, wird diese geprüft werden kann nur während der Laufzeit.
  • Ja klar, dass ich möchte zeigen, während, die Sie gerne zu verbergen haben, persönlich, wenn ich andere Leute die Klassen mag ich eher geringes Gewicht, weil Sie dazu neigen, dann werden mehr wiederverwendbare aber jedem das seine.
  • K: Es ist nicht so, dass ich gerne etwas verstecken. In meinem Fall wäre es einfach nur dumm zu entlarven Voraussetzungen der Klasse Benutzer.

InformationsquelleAutor doc | 2010-05-29
Schreibe einen Kommentar