यदि आपका आवेदन गति महत्वपूर्ण है तो मैं [] ऑपरेटर का उपयोग करने की सलाह दूंगा क्योंकि यह मूल वस्तु की कुल 3 प्रतियां बनाता है जिसमें से 2 अस्थायी वस्तुएं हैं और जितनी जल्दी या बाद में नष्ट हो जाती हैं।
लेकिन सम्मिलित () में, मूल वस्तु की 4 प्रतियां बनाई जाती हैं, जिनमें से 3 अस्थायी वस्तुएं होती हैं (जरूरी नहीं कि "अस्थायी") और नष्ट हो जाएं।
जिसका मतलब है कि इसके लिए अतिरिक्त समय: 1. एक वस्तु स्मृति आवंटन 2. एक अतिरिक्त निर्माणकर्ता कॉल 3. एक अतिरिक्त विध्वंसक कॉल 4. एक वस्तु स्मृति आबंटन
यदि आपकी वस्तुएं बड़ी हैं, तो निर्माणकर्ता विशिष्ट हैं, विध्वंसक बहुत सारे संसाधन मुक्त करते हैं, ऊपर दिए गए अंक और भी अधिक गिनते हैं। पठनीयता के बारे में, मुझे लगता है कि दोनों पर्याप्त रूप से उचित हैं।
मेरे दिमाग में यही सवाल आया लेकिन पठनीयता नहीं बल्कि गति। यहाँ एक नमूना कोड है जिसके माध्यम से मुझे उस बिंदु के बारे में पता चला जिसका मैंने उल्लेख किया था।
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;
}