|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2006
Messaggi: 38
|
[C++] Ctor
Ciao!!
Per quale motivo un costruttore che utilizza una lista di inizializzatori e' piu' efficiente rispetto ad un altro, identico, che usa invece l'assegnamento? Codice:
class my_class {
public:
my_class(type i = default_value_i, type j = default_value_j) : a(i), b(j) {};
...
private:
type a, b;
};
class my_class {
public:
my_class(type i = default_value_i, type j = default_value_j) { a = i; b = j; }
...
private:
type a, b;
};
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Immagina di avere questa classe:
Codice:
class A
{
public:
A()
{
// fai tante operazioni per inizializzare l'oggetto
}
A(A& a)
{
Copy(a);
}
A& operator=(A& a)
{
Copy(a);
return *this;
}
void Copy(a)
{
// inizializza l'oggetto e copia il contenuto di a
}
};
Codice:
class B1
{
A a;
public:
B1(A& lhr): a(lhr)
{
}
};
class B2
{
A a;
public:
B2(A& lhr)
{
a = lhr;
}
};
a.ctor(lhr); Il costruttore della classe B2 invece questo: a.ctor(); a.operator=(lhr); Nel secondo caso chiami il costruttore, inizializzi l'oggetto, poi chiami l'operatore di assegnamento che distrugge il contenuto appena inizializzato, e poi effettua la copia. Ovviamente ci sono vari modi di migliorare la situazione nel secondo caso (magari un flag per capire se l'oggetto e' stato gia' inizializzato o meno), ma il modo piu' semplice e' usare gli strumenti che il C++ mette a disposizione: la lista di inizializzazione. Nel caso di oggetti molti semplici come gli interi non cambia nulla, ma e' sembre comunque buona norma usare la lista di inizializzazione.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2006
Messaggi: 38
|
Grazie per la risposta.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:44.



















