OVH Cloud OVH Cloud

this dans un constructeur

11 réponses
Avatar
Marc
Question simple : est-ce qu'on peut utiliser this dans un constructeur ou
c'est dangereux ?
Pire :
est-ce que dans le constructeur je peux écrire par exemple
throw std::invalid_argument("conversion de "+this->get_typename()+" en
MonObjet impossible.");
où ici get_typename() est une fonction virtuelle.
Mon compilo accepte tous çà à la compilation.
Ce cas ne devrait pas se produire mais au cas où...
Marc

1 réponse

1 2
Avatar
James Kanze
"Marc" writes:

|> Je concède que le petit bout de code if (isA()) ...dans le
|> constructeur de A renverra toujours true et n'a aucun
|> intérêt.Cependant, là n'était pas la question ! En fait il y en
|> avait deux :

|> - je constatait avec surprise qu'on pouvait avoir une classe n'ayant
|> qu'un constructeur de copie. C'est évident pour les surdoués, mais
|> pas pour moi.

C'est évident si on a compris un principe de base de C++ : tout ce qui
est permis n'est pas forcément bon:-). Ou plus sérieusement, tout est
permis, sauf ce qui est explicitement interdit. Au moins que tu aies vu
une interdiction explicite quelque part, il faut partir du principe que
c'est permis. Même s'il semble a priori sans intérêt.

|> - isA() utilise le polymorphisme, exactement comme dynamic_cast<> je
|> suppose ! Et ma question était simplement de savoir si s'était +/-
|> performant.

Sauf que dans l'exemple, la question est plutôt quel est le type
dynamique de l'objet dans le constructeur. Si tu veux comparer la
performance, il faudrait en donner un exemple des deux versions qu'on
doit comparer.

En attendant, dans ton example, que tu appelles une fonction virtuelle,
ou que tu te sers de dynamic_cast ou de typeid, le resultat est le même :
dans un constructeur, le type dynamique de l'objet correspond au type du
constructeur.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
1 2