หากใบสมัครของคุณมีความสำคัญอย่างมากฉันจะแนะนำให้ใช้ตัวดำเนินการ [] เพราะมันจะสร้างสำเนาต้นฉบับทั้งหมด 3 ฉบับโดยที่ 2 นั้นเป็นวัตถุชั่วคราวและไม่ช้าก็เร็วจะถูกทำลายเป็น
แต่ในส่วนแทรก () จะมีการสร้างวัตถุดั้งเดิมจำนวน 4 ชุดโดยที่ 3 ชิ้นเป็นวัตถุชั่วคราว (ไม่จำเป็นต้องเป็น "ชั่วคราว") และถูกทำลาย
ซึ่งหมายถึงเวลาพิเศษสำหรับ: 1. การจัดสรรหน่วยความจำหนึ่งวัตถุ 2. การเรียกตัวสร้างพิเศษหนึ่งครั้ง 3. การโทร destructor พิเศษหนึ่งครั้ง 4. การจัดสรรคืนหน่วยความจำวัตถุหนึ่งชิ้น
หากวัตถุของคุณมีขนาดใหญ่คอนสตรัคเตอร์ก็เป็นแบบปกติ destructors จะช่วยประหยัดทรัพยากรได้มาก เกี่ยวกับความสามารถในการอ่านฉันคิดว่าทั้งคู่มีความยุติธรรมเพียงพอ
คำถามเดียวกันเข้ามาในใจของฉัน แต่ไม่เกินอ่านง่าย แต่ความเร็ว นี่คือตัวอย่างโค้ดที่ฉันรู้เกี่ยวกับประเด็นที่ฉันพูดถึง
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;
}