Jika aplikasi Anda sangat kritis, saya akan menyarankan menggunakan operator [] karena itu membuat total 3 salinan dari objek asli yang 2 di antaranya adalah objek sementara dan cepat atau lambat dihancurkan sebagai.
Namun dalam sisipan (), 4 salinan dari objek asli dibuat dari mana 3 adalah objek sementara (tidak harus "temporer") dan dihancurkan.
Yang berarti waktu tambahan untuk: 1. Alokasi memori satu objek 2. Satu panggilan konstruktor ekstra 3. Satu panggilan destruktor tambahan 4. Satu objek memori deallokasi
Jika objek Anda besar, konstruktor adalah tipikal, destruktor melakukan banyak pembebasan sumber daya, poin di atas bahkan lebih diperhitungkan. Mengenai keterbacaan, saya pikir keduanya cukup adil.
Pertanyaan yang sama muncul di benak saya tetapi tidak terlalu mudah dibaca tetapi kecepatan. Berikut adalah contoh kode yang saya gunakan untuk mengetahui poin yang saya sebutkan.
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;
}