アプリケーションが速度重視の場合、[]演算子を使用してアドバイスします。元のオブジェクトの合計3つのコピーが作成され、そのうち2つは一時オブジェクトであり、遅かれ早かれ破棄されます。
しかし、insert()では、元のオブジェクトの4つのコピーが作成され、そのうち3つは一時オブジェクト(必ずしも「一時」ではない)であり、破棄されます。
つまり、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;
}