Uygulamanız hız açısından kritikse, orijinal nesnenin 2 tanesi geçici nesne olan ve er ya da geç olarak imha edilen toplam 3 kopyasını oluşturduğu için [] operatörünü kullanmanızı öneririm.
Ancak insert () 'de, orijinal nesnenin 4 kopyası oluşturulur ve bunların 3 tanesi geçici nesnelerdir (mutlaka "geçici" değil) ve yok edilir.
Bu, aşağıdakiler için ekstra zaman anlamına gelir: 1. Bir nesne bellek ayırma 2. Bir ekstra kurucu çağrı 3. Bir ekstra yıkıcı çağrı 4. Bir nesne bellek ayırma
Nesneleriniz büyükse, yapıcılar tipiktir, yıkıcılar çok fazla kaynak serbest bırakır, yukarıdaki noktalar daha da önemlidir. Okunabilirlik konusunda, her ikisinin de yeterince adil olduğunu düşünüyorum.
Aynı soru aklıma geldi ama aşırı okunabilirlik değil, hız. Burada bahsettiğim nokta hakkında bilmek için geldi bir örnek kod.
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;
}