Dans des mots simples, un "trivial" spécial fonction membre signifie littéralement une fonction membre qui fait son travail dans un très simple. Le "simple" ne signifie pas la même chose pour les différents types de spécial les fonctions de membres.
Pour un constructeur par défaut et destructeur de l'être "trivial" signifie littéralement "ne rien faire". Pour le constructeur par copie et copie-opérateur d'affectation, d'être "trivial" signifie littéralement "être équivalent simple de la mémoire brute de la copie" (comme la copie avec memcpy
).
Si vous définissez un constructeur vous-même, il est considéré comme non négligeable, même si ce n'est pas faire n'importe quoi, donc trivial constructeur doivent être définis implicitement par le compilateur.
Dans l'ordre, pour une fonction membre pour satisfaire les exigences ci-dessus, la classe doit avoir une très simpliste de la structure, il ne doit pas exiger de toute caché initialisations lorsqu'un objet est créé ou détruit, ou cachés interne supplémentaire manipulations lorsqu'il est copié.
Par exemple, si la classe a fonctions virtuelles, il faudra un peu cachés supplémentaires initialisations lorsque les objets de cette classe sont en cours de création (initialiser la table de méthode virtuelle et par exemple), de sorte que le constructeur de cette classe ne sont pas considérés comme triviaux.
Pour un autre exemple, si une classe a virtual classes de base, puis chaque objet de cette classe peut contenir caché des pointeurs qui pointent vers d'autres parties du même objet. Une telle auto-référentielle de l'objet ne peut pas être copié par un simple raw copie de la mémoire de routine (comme memcpy
). Extra manipulations sera nécessaire pour ré-initialiser le caché des pointeurs dans la copie. Pour cette raison, le constructeur de copie et de copie opérateur d'affectation pour cette classe ne seront pas considérés comme triviaux.
Pour des raisons évidentes, cette exigence est récursive: tous les objets de la classe (les bases et les membres non statiques) doit également avoir trivial constructeurs.