std::vector コードを調べていたところ、よくわからないものが見つかりました。capacity < size() + 1 の場合、新しい要素を挿入できるようにバッファーを再割り当てする必要があります。それが何をするか(コードから抽出できた限り)は次のとおりです。
- 新しいバッファを割り当てます
- 古いバッファのプレフィックスをコピーします (0 - 挿入のインデックス)
- 新しいバッファに新しい要素を構築します
- 古いバッファのサフィックスをコピーします (インデックス - 終了)
- 古いバッファ内のすべての項目でデストラクタを呼び出す
- 古いバッファの割り当てを解除
私が見る限り、接頭辞と接尾辞のコピーは memmove で行われます。memmove はデータの純粋なバイナリ コピーではありませんか? 要素のコンストラクターを呼び出しませんよね?私が疑問に思っていたのは、メモリが移動されただけで、新しいバッファで再構築されていない場合、関数が古いバッファの要素でデストラクタを呼び出すのはなぜですか?