Main menu:

Site search

Categories

mai 2008
L M M J V S D
 1234
567891011
12131415161718
19202122232425
262728293031  

Archive

C++ – Liste d’initialisation

Il est de bonne pratique d’initialiser les variables membres d’une classe au moyen d’une liste d’initialisation plutôt que de le faire dans le corps du constructeur par exemple.
Cette pratique est plus efficace et moins sujette aux bugs sans compter que la liste d’initialisation doit être utilisée pour certains objets qui ne peuvent pas être contruits par défaut. C’est le cas des références et des objets constants auxquels c’est la seule façon de donner une valeur puisqu’après vous ne pourrez plus le faire.

class A
{
  public:
    A()
    {
      str = "hello";
    }
  private:
    std::string str;
};

Dans le cas ci-dessus, str est d’abord construit par défaut. Un buffeur est alloué à ce string. Ensuite, ce buffeur est désalloué et un nouveau, d’une taille suffisante pour contenir le string est alloué. Le string « hello » est ensuite copié dans ce buffer.

class A
{
  public:
    A() : str("hello") {}
  private:
    std::string str;
};

Dans l’exemple ci-dessus, on utilise une liste d’initialisation. str est directement construit avec le string « hello ». Il n’y a pas cette construction par défaut et la désallocation d’un buffer. Cette méthode est plus efficace.

Pour les types intrinsèques comme les int par exemple, cela n’a pas d’importance. Néanmoins, initialiser les variables est toujours une bonne idée et une source de bugs en moins.