Si grazie per l'accorgimento ,piccolo errore di distrazione..
non è che potresti dirmi se ho fatto bene o corregermi nel caso??, con particolare attenzione sull 'operatore di uguaglianza.Gentilmente.
Come mai prima hai scritto che la classe avrebbe bisogno solo dell'operatore di ug?
Cioe' quali sono i casi in cui la classe ha bisogno solo dell'operatore di uguaglianza.?

codice:
automobile::automobile(const automobile& a)
{
  modello=a.modello;
     for(list<componente>::const_iterator it=a.componenti.begin() ; it!=a.componenti.end() ; it++)
       componenti.push_back(*it);
}

automobile& automobile::operator=(const automobile& a)
{
     modello = a.modello;  

           for(list<componente>::const_iterator it=a.componenti.begin() ; it!=a.componenti.end() ; it++)
       componenti.push_back(*it);       

}


bool automobile::operator == (const automobile& a)
{ 
 list<componente>::iterator it2=componenti.begin();
  
   for(list<componente>::const_iterator it1=a.componenti.begin() ; it1!=a.componenti.end() ; it1++)
       {
                   if(*it2 !=*it1 )
                        return false;          

                 it2++;
        }      

      if( modello== a.modello    )
            return true;

return false;
}