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 回答