Ho codice C++ che si riduce a qualcosa di simile al seguente:inizializzare le variabili membro const
class Foo{
bool bar;
bool baz;
Foo(const void*);
};
Foo::Foo(const void* ptr){
const struct my_struct* s = complex_method(ptr);
bar = calculate_bar(s);
baz = calculate_baz(s);
}
vista semantico, le variabili membro bar e baz dovrebbe essere const, dal momento che non dovrebbe cambiare dopo l'inizializzazione. Tuttavia, sembra che per renderli tali, avrei bisogno di inizializzarli in una lista di inizializzazione piuttosto che assegnarli. Per essere chiari, capisco why Ho bisogno di fare questo. Il problema è che io non riesco a trovare un modo per convertire il codice in un elenco di inizializzazione senza fare una delle seguenti cose indesiderabili:
- chiamata
complex_method
due volte (sarebbe male per le prestazioni) - Add il puntatore alla classe Foo (renderebbe la dimensione della classe inutilmente grande)
C'è un modo per rendere costanti le variabili evitando queste situazioni indesiderabili?
Come parte, sei sicuro che 'complex_method' dovrebbe tornare con il puntatore? E se lo fa, non è necessario ripulirlo, il che suggerisce di usare 'std :: unique_ptr' per salvarlo? – Deduplicator
Esatto, ho solo semplificato il codice effettivo per il frammento di cui sopra per brevità. – dooglius
Evita di creare membri const. Se l'oggetto Foo non dovesse cambiare, rendere invece il vero oggetto const. –