スマートポインターは配列をどのように処理しますか?例えば、
void function(void)
{
std::unique_ptr<int> my_array(new int[5]);
}
いつ my_array
はスコープから外れて破壊されます。整数配列全体が再要求されますか?配列の最初の要素のみが再生されますか?または、何か未定義の動作などが起こっていますか?
delete[]
を呼び出すため、配列全体が再生されますが、unique_ptr
byの配列形式を使用していることを示す必要があると思います。
std::unique_ptr<int[]> my_array(new int[5]);
これはunique_ptr
の-Partial Specializationと呼ばれます。
編集:以下のコメントで説明されているように、この答えは間違っていました。私が最初に言ったことは次のとおりです。
Std :: unique_ptrがdelete []を呼び出すことを知っているとは思わない。事実上、メンバーとしてint *があります。int*を削除すると、配列全体が削除されるため、この場合は問題ありません。
通常の削除とは異なり、delete []の唯一の目的は、配列内の各要素のデストラクターを呼び出すことです。プリミティブ型の場合は関係ありません。
私は何かを学んだので、ここに残します-他の人もそうすることを望みます。