いいえ、これがその理由です。
次の 2 つのケースを考えてみましょう。
int a, b, c;
auto stackvec = new vector<int*> { &a, &b, &c };
auto heapvec = new vector<int*> { new int, new int, new int };
delete stackvec;
delete heapvec;
delete
保持しているポインターで呼び出されたvector*
sを呼び出すと、未定義の動作を生成する最初の自動変数を使用することになるため(悪いことです)、delete
問題が山積みになります (しゃれが意図されています)。delete
delete
ポインタが動的に割り当てられていることがわかっている場合は、ポインタvector
とポインタを自分で手動で反復する必要があります。使用すると、何も呼び出す必要がありません。delete
std::unique_ptr
delete
また、そもそもaへのポインターは必要ないかもしれませんが、vector
あなたの状況がわからないので判断しません。
std::array
とについては、コンパイル時にstd::vector
のサイズを知る必要があり、実行時にサイズを変更することはできませんが、これらの制限はありません。std::array
vector