nEUrOO> si un constructeur par recopie ou un opérateur= standard n'est pas fourni, le compilateur se charge d'en fournir un par défaut, qui est une copie bit à bit. Pour cet exemple ce n'est pas genant.
J'aimerais revenir sur l'exemple de nEUrOO, qui est bon s'il fait ce que tu voulais...mais il faut savoir exactement ce que tu voulais =>
class platform {};
class scheduler
{
platform m_p;
public:
scheduler(platform & p) : m_p(p) {}
~scheduler();
};
class platform {};
class scheduler
{
platform m_p;
public:
scheduler(platform & p) {m_p=p;}
~scheduler();
};
class platform {};
class scheduler
{
platform & m_p;
public:
scheduler(platform & p) : m_p(p) {}
~scheduler();
};
Ces trois exemples font des choses assez proches mais néanmoins différentes :
1) Le premier exemple a un membre de type platforme, qui est initialisé à partir du paramètre p. Si la classe platform disposait d'un constructeur par recopie, il serait appelé (ici le compilateur appelera le constructeur par défaut, qui fait une copie bit à bit).
2) Le deuxième exemple commence par créer un membre de type plateforme, initialisé avec son constructeur par défaut (s'il n'est pas fourni, comme dans cet exemple, le compilateur fournit un constructeur vide). Puis le corps du constructeur de scheduler assigne le paramètre au membre, au moyen de l'operator= (qui, ici est une copie bit à bit fournie par le compilateur).
3) Dans le dernier exemple (celui de nEUrOO), la classe scheduler ne contient pas de membre de type plateforme, mais une simple référence. Cette référence sera un alias pour l'objet passé en paramètre à la construction du scheduler (c'est à dire que &m_p == &p). Attention en particulier si l'objet en question est détruit avant le scheduler : la référence deviendra invalide.