希望这不是一个基本的问题。我想知道做
之间是否有区别while (1) {
int *a = new int(1);
// Do stuff with a
}
而不是
int *a;
while (1) {
a = new int(1);
// Do stuff with a
}
在这两种情况下,动态分配相同数量的对象。但是在第一个例子中循环内使用int关键字的事实会影响使用的内存吗?
答案 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)
它们本质上是相同的,几乎肯定会被编译相同。即使它们不是这样,你进行堆分配的事实也比额外的堆栈分配成本更高。
首先选择第一个,因为它有更严格的范围。