0

うまくいけば、これはあまりにも基本的な質問ではありません。やることに違いがあるのだろうかと思っています

while (1) {
    int *a = new int(1);
    // Do stuff with a
}

とは対照的に

int *a;
while (1) {
    a = new int(1);
    // Do stuff with a
}

どちらの場合も、同じ数のオブジェクトが動的に割り当てられます。しかし、最初の例のループ内で int キーワードが使用されているという事実は、使用されるメモリに影響しますか?

4

2 に答える 2

4

違いはスコープです。

while (1) {
    int *a = new int(1);
    // Do stuff with a

    // Don't forget to delete a.
}

// Cannot access `a` here...

一方:

int *a;
while (1) {
    a = new int(1);
    // Do stuff with a

    // Don't forget to delete a.
}

// Can access `a` here.

両方の例でメモリ リークが発生しています。スマートポインタを好む!

于 2012-04-15T03:23:05.737 に答える
4

それらは本質的に同じであり、ほぼ確実に同じようにコンパイルされます。そうでなかったとしても、ヒープ割り当てを行っているという事実は、追加のスタック割り当てよりもはるかにコストがかかります。

ただし、スコープがより狭いため、最初のものをお勧めします。

于 2012-04-15T03:24:46.670 に答える