アプリケーションの速度が重要な場合は、[] 演算子を使用することをお勧めします。これは、元のオブジェクトの合計 3 つのコピーが作成され、そのうち 2 つが一時オブジェクトであり、遅かれ早かれ破棄されるためです。
しかし、insert() では、元のオブジェクトの 4 つのコピーが作成され、そのうち 3 つが一時オブジェクト (必ずしも「一時」であるとは限りません) であり、破棄されます。
1. 1 つのオブジェクトのメモリ割り当て 2. 1 つの追加のコンストラクタ呼び出し 3. 1 つの追加のデストラクタの呼び出し 4. 1 つのオブジェクトのメモリ割り当て解除
オブジェクトが大きい場合、コンストラクターが典型的であり、デストラクタは多くのリソースを解放し、上記のポイントはさらにカウントされます。読みやすさに関しては、どちらも十分に公平だと思います。
同じ質問が頭に浮かびましたが、読みやすさではなく速度についてでした。これは、私が言及したポイントについて知るようになったサンプルコードです。
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;
}