Nếu ứng dụng của bạn có tốc độ quan trọng, tôi sẽ tư vấn sử dụng toán tử [] bởi vì nó tạo ra tổng số 3 bản sao của đối tượng ban đầu trong đó có 2 đối tượng tạm thời và sớm muộn bị phá hủy.
Nhưng trong insert (), 4 bản sao của đối tượng ban đầu được tạo ra trong đó 3 bản sao là đối tượng tạm thời (không nhất thiết là "tạm thời") và bị hủy.
Có nghĩa là thêm thời gian cho: 1. Cấp phát bộ nhớ cho một đối tượng 2. Một lệnh gọi hàm tạo thêm 3. Một lệnh gọi hàm hủy thêm 4. Phân bổ bộ nhớ một đối tượng
Nếu các đối tượng của bạn lớn, các hàm tạo là điển hình, các hàm hủy sẽ giải phóng rất nhiều tài nguyên, các điểm trên còn nhiều hơn thế. Về khả năng đọc, tôi nghĩ cả hai đều đủ công bằng.
Câu hỏi tương tự xuất hiện trong đầu tôi nhưng không quá dễ đọc mà là tốc độ. Đây là một mã mẫu mà qua đó tôi đã biết về điểm tôi đã đề cập.
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;
}