Come si usa il costruttore non predefinito per un membro?
-
21-09-2019 - |
Domanda
Ho due classi
class a {
public:
a(int i);
};
class b {
public:
b(); //Gives me an error here, because it tries to find constructor a::a()
a aInstance;
}
Come posso ottenere in modo che AINSTANCE viene creata un'istanza con un (int i) invece di cercare di cercare un costruttore di default? Fondamentalmente, voglio controllare la chiamata di un costruttore di dall'interno il costruttore di b.
Soluzione
È necessario chiamare un (int) in modo esplicito nella lista del costruttore di inizializzazione:
b() : aInstance(3) {}
Dove 3 è il valore iniziale che si desidera utilizzare. Anche se potrebbe essere qualsiasi int. Vedere i commenti per le note importanti sul ordine e altri avvertimenti.
Altri suggerimenti
Utilizzare un elenco di inizializzazione:
b::b() : aInstance(1) {}
Basta usare un costruttore che è definito in questo modo:
class b {
public:
b()
: aInstance(5)
{}
a aInstance;
};
Credo che si dovrebbe utilizzare un puntatore a 'a' come:
class b {
public:
b() : aInstance(new a(5)) {}
a *aInstance;
};
In questo modo si avrà definito il comportamento. Naturalmente è necessario liberare * AINSTANCE nel distruttore.