2010-08-14 3 views
3

Je sais que la fonction membre normale d'une classe modèle sera instanciée chaque fois qu'elle est utilisée pour la première fois. Mais ceci ne peut pas être fait pour la fonction de membre virtuelle car elle peut être accédée par le pointeur de classe de base. Cela signifie que les fonctions membres virtuelles seront instanciées dès que la classe tmeplate est instanciée? Si pas quand?Lorsque les fonctions de membre virtuel d'une classe de modèle sont instanciées?

Répondre

5

14.7.1/9 en C++ 03:

Une mise en œuvre ne doit pas instancier implicitement un modèle de fonction, un modèle de membre, une fonction non membre virtuel, une classe de membre ou un membre de données statiques d'un modèle de classe cela ne nécessite pas d'instanciation. Il n'est pas spécifié si une implémentation instancie implicitement une fonction membre virtuelle d'un modèle de classe si la fonction de membre virtuel ne serait pas instanciée.

1

La mise en œuvre est définie.

Mais généralement, lorsqu'une classe de modèle est instanciée, tous les membres du nouveau type de classe sont générés.

1

Selon le C++ standard 14.6.4.1/4:

Si une fonction virtuelle est implicitement instancié, son point de instanciation suit immédiatement point de instanciation de sa catégorie englobante modèle spécialisation.

+0

Il veut savoir si la fonction est instanciée ou non. Pas où l'instanciation est mise. –

Questions connexes