Pages

vendredi 22 février 2013

Nouveauté sur les unions

Avant le C++11 les types mis dans les unions se limitaient aux objets POD.
Maintenant plus de limite, faut juste bien appeler le destructeur de l'objet construit dans l'union au risque de jolie fuite mémoire :).

union U{
  int i;
  std::string s;

  U():i(){} //constructeur obligé car s n'est pas un objet POD
  ~U(){} //destructeur qui ne fait rien mais aussi obligé

  void construct_s(const std::string& str)
  { new (&s) std::string(str); } //inclure <memory>

  void destroy_s()
  { s.~basic_string(); } //note string = basic_string<char>
};

Comme tel, c'est un peu limité mais c'est pour montrer...

Aucun commentaire: