Se la tua applicazione è fondamentale per la velocità, ti consiglio di utilizzare l'operatore [] perché crea un totale di 3 copie dell'oggetto originale, di cui 2 sono oggetti temporanei e prima o poi distrutti come.
Ma in insert (), vengono create 4 copie dell'oggetto originale, di cui 3 sono oggetti temporanei (non necessariamente "temporanei") e vengono distrutti.
Ciò significa tempo extra per: 1. Allocazione di memoria di un oggetto 2. Chiamata di un costruttore supplementare 3. Chiamata di un distruttore supplementare 4. Deallocazione di memoria di un oggetto
Se i tuoi oggetti sono grandi, i costruttori sono tipici, i distruttori fanno molta liberazione delle risorse, i punti sopra contano ancora di più. Per quanto riguarda la leggibilità, penso che entrambi siano abbastanza equi.
Mi è venuta in mente la stessa domanda, ma non oltre la leggibilità ma la velocità. Ecco un codice di esempio attraverso il quale sono venuto a conoscenza del punto che ho citato.
class Sample
{
static int _noOfObjects;
int _objectNo;
public:
Sample() :
_objectNo( _noOfObjects++ )
{
std::cout<<"Inside default constructor of object "<<_objectNo<<std::endl;
}
Sample( const Sample& sample) :
_objectNo( _noOfObjects++ )
{
std::cout<<"Inside copy constructor of object "<<_objectNo<<std::endl;
}
~Sample()
{
std::cout<<"Destroying object "<<_objectNo<<std::endl;
}
};
int Sample::_noOfObjects = 0;
int main(int argc, char* argv[])
{
Sample sample;
std::map<int,Sample> map;
map.insert( std::make_pair<int,Sample>( 1, sample) );
//map[1] = sample;
return 0;
}