Le ctor défini par le compilateur doit initialiser les variables membres en utilisant les facteurs par défaut pour les types de ces variables. Seuls les membres POD restent non initialisés. Notez également que lorsque/si vous utilisez l'héritage, le ctor travaille en conjonction avec des cteurs de classe de base pour créer l'objet.
Lorsque vous définissez vous-même un ctor, cela empêche le compilateur de générer d'autres cteurs pour vous. Par exemple, si vous avez quelque chose comme:
struct X {
int a;
public:
X(int) {}
};
int main() {
X x; // error: no default ctor defined
X x = X(3); // no problem.
}
Le fait que vous avez défini une cteur qui prend un argument int signifie que le compilateur pas générer un cteur par défaut pour vous, de sorte que le X x;
ne sera pas work - vous besoin de soit pour spécifier un argument int (qui sera ignoré) ou bien définir un ctor par défaut pour la classe. Si vous commentez le ctor défini ci-dessus, puis le compilateur générera un ctor par défaut, donc le X x;
fonctionnera.
Quel manuel C++ utilisez-vous qui ne l'explique pas? –
Le constructeur généré par le compilateur initialise les membres en appelant leurs constructeurs par défaut dans l'ordre de déclaration de ces membres. Pour les non-POD, cela signifie le constructeur, tandis que pour POD, l'action dépend de la façon dont l'objet est initialisé. –
@Neil: toujours avec le sarcasme. Votez pour cela :) – Bruce