在C ++中为for循环中的变量赋值

时间:2012-04-15 03:18:45

标签: c++ performance memory-management

希望这不是一个基本的问题。我想知道做

之间是否有区别
while (1) {
    int *a = new int(1);
    // Do stuff with a
}

而不是

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

在这两种情况下,动态分配相同数量的对象。但是在第一个例子中循环内使用int关键字的事实会影响使用的内存吗?

2 个答案:

答案 0 :(得分: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.

您的两个示例中都有a memory leak。喜欢smart pointers

答案 1 :(得分:4)

它们本质上是相同的,几乎肯定会被编译相同。即使它们不是这样,你进行堆分配的事实也比额外的堆栈分配成本更高。

首先选择第一个,因为它有更严格的范围。