将新对象分配给 for 循环中的变量 C++

Assigning a new object to a variable in a for loop in C++

本文关键字:循环 for C++ 变量 分配 新对象 对象      更新时间:2023-10-16

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

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

而不是

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

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

区别在于范围

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.

在两个示例中都有内存泄漏。更喜欢智能指针!

它们本质上是相同的,几乎可以肯定是相同的编译。即使它们不是,您进行堆分配的事实也比额外的堆栈分配成本高得多。

不过更喜欢第一个,因为它的范围更严格。