2010-04-21 6 views
2

J'ai une classe Angle que je veux initialiser à une valeur aléatoire. Le constructeur Angle peut accepter un int d'une fonction random(). Est-il sûr de placer cet appel dans la liste des cteur:Est-il sûr d'appeler une fonction pour initialiser une classe dans une liste ctor?

foo::foo() : Angle(random(0xFFFF)) {...} 

ou dois-je le faire dans le corps du constructeur? Si cela est important, la classe foo est dérivée d'une autre classe et possède des méthodes virtuelles. En outre, aucune gestion des exceptions n'est autorisée dans notre application.

Répondre

4

Si random ne peut pas lancer (difficile à croire qu'il pourrait), il n'y a pas de problème avec cela. Les effets secondaires sont autorisés dans les initialiseurs de constructeur. C'est une bonne pratique de faire une initialisation là-bas, si cela ne prend que peu de code.

+0

C'est ce que je cherchais. Merci! –

+0

Même si random peut déclencher une exception, il existe une construction spéciale appelée bloc function-try qui vous permet d'intercepter l'exception. –

+0

Encore une fois, dans mon cas, ce n'est pas grave car les exceptions sont complètement désactivées dans mon application. –