Ho un programma C++ che utilizza un elenco std :: contenente istanze di una classe. Se chiamo ad es. myList.push_back(MyClass(variable));
attraversa il processo di creazione di una variabile temporanea, quindi la copia immediatamente nel vettore e successivamente elimina la variabile temporanea. Non è così efficiente come voglio e fa schifo quando hai bisogno di una copia profonda.Come inizializzare un vettore/elenco STL con una classe senza invocare il costruttore di copie
Mi piacerebbe avere il costruttore della mia classe new
qualcosa e non dover implementare un costruttore di copie solo per allocare la memoria per la seconda volta e sprecare tempo di esecuzione. Preferisco anche non dover trovare immediatamente l'istanza di classe dal vettore/elenco e quindi allocare manualmente la memoria (o fare qualcosa di orribile come allocare la memoria nel costruttore di copie stesso).
C'è un modo per aggirare questo (non sto utilizzando Visual Studio BTW)?
Che compilatore stai utilizzando? Credo che questo caso sia generalmente ottimizzato nei nuovi compilatori. –
Stai eseguendo questa analisi con una build ottimizzata? –
È necessario testare con una build di rilascio. Potrebbe farlo in modalità DEBUG, ma utilizzare RVO (ottimizzazione del valore di ritorno) in modalità di rilascio, che elimina la copia. – Nate