74 votes

Constructeur statique en c++

Cette question a été posée à moi dans une interview:

Qu'est ce qu'un constructeur statique?

Existe-t-elle en C++? Si oui, veuillez expliquer avec un exemple.

89voto

Konrad Rudolph Points 231505

C++ n'ont pas de constructeurs statiques mais vous pouvez les imiter à l'aide d'une instance statique d'une classe imbriquée.

class has_static_constructor {
    friend class constructor;

    struct constructor {
        constructor() { /* do some constructing here … */ }
    };

    static constructor cons;
};

// C++ needs to define static members externally.
has_static_constructor::constructor has_static_constructor::cons;

19voto

Nawaz Points 148870

En C++, il n'y a pas de constructeur statique. En C# (et probablement en Java aussi), vous pouvez définir constructeur statique qui est appelée automatiquement par le moteur d'exécution de manière à initialiser les membres statiques.

Pour plus de question et de l'intérêt que vous pouvez lire à ce sujet:

Quelle est la justification pour ne pas avoir de constructeur statique en C++?

9voto

bearvarine Points 51

Comme nous n'avons pas techniquement avez constructeurs statiques en C++, vous devez décider si cela vaut la peine de faire quelque chose de difficile à forcer le problème (par exemple en utilisant une instance statique d'une classe imbriquée), ou juste un peu de restructurer votre code pour appeler un initialiseur statique au début de votre programme de vie.

// file Foo.h
class Foo
{
    Foo ();
   ~Foo ();
    static void init (void);
    static string my_text_str;
}

// file Foo.cpp
Foo::init (void)
{
    my_text_str = "I am set now";
}

// file main.cpp
int main ()
{
   Foo::init ();
}

J'aime cette approche mieux, comme la doublure d'argent, il prend le non de la non-déterministe de l'initialisation.

8voto

SLaks Points 391154

Constructeurs statiques existent pas en C# et Java.
Ils sont utilisés pour initialiser les membres statiques d'une classe.
Le moteur d'exécution exécute avant la classe est d'abord utilisé.

4voto

beduin Points 2742

Il n'y a pas une telle chose en C++. Les constructeurs et les destrcutors généralement utilisé pour créer ou détruire instance de l'objet. C'est vide de sens pour les appeler sans instance de l'objet. Vous pouvez l'imiter à l'aide d'un singleton pattern.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X