最近ソートアルゴリズムについて多くのことを読んでいます。 この関数では、forループ内に一時配列を作成する必要があります。コンパイラが自動的にそれを破壊し、各反復の後にメモリを解放するためになぜちょうど、new演算子なしで直接作成しない: とサンプルコードは、問題があるC++何が一時オブジェクトと配列を扱う適切な方法ですか?
for(;;)//ignore the condition
{
int *b = new int[N];
//some code
delete b[];
}
です。以下のようなループ
int b[N];
でこれを書いて、前に、私はいつも一時的なタイプ/オブジェクトを作成するには、このメソッドを使用します。私はまったく間違っているか、配列のようなものが組み込み型とは違うのですか?
だから、種類のスタックオーバーフロー、誰も私にいくつかのアドバイスを与えることができますか?
Nが定数ではないと仮定して、あなたはできません。しかし、あなたは間違いなくポインタと新しいの代わりにstd :: vectorを使うべきです。 –
ほんの少しです:GCCはコンパイル時にNがわからない場合、VLA(可変長配列)をサポートしているので、これをうまく受け入れますが、多くのコンパイラは(MSVCのように)しません。移植性が心配されていない限り、これには他の提案と同様にベクトルを使用する必要があります。あなたは技術的には 'alloca()'を使ってVLAのようなサポートを得ることができますが、実際には**これを行うべきではありません。 –
@AlexanderHuszagh * GCCは、Nがコンパイル時に知られていない場合、これをうれしく受け入れます。* IMO、プログラマがコマンドラインで要求しない限り、喜んでそれを受け入れるべきではありません。なぜgccや他のコンパイラがVLAをデフォルトにするのか分かりません。新しいプログラマーは、有効なC++コードを書いていると信じています。 – PaulMcKenzie