希望這不是問題的基礎。我不知道是否有做在C++中爲for循環中的變量分配新對象
while (1) {
int *a = new int(1);
// Do stuff with a
}
,而不是
int *a;
while (1) {
a = new int(1);
// Do stuff with a
}
在這兩種情況下,相同數量的對象是動態分配的差異。但是在第一個例子中int關鍵字在循環中使用的事實會影響使用的內存嗎?
希望這不是問題的基礎。我不知道是否有做在C++中爲for循環中的變量分配新對象
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.
您有您的兩個例子a memory leak。首選smart pointers!
好的,我不確定是否在第一個示例中重新創建了循環的每個迭代的引用。而且,是的,這意味着刪除一個是在某處/ /與一個東西。謝謝。 – gsingh2011 2012-04-15 03:26:36
我並不認爲這是暗示的。你究竟在做什麼? – Johnsyweb 2012-04-15 03:29:50
我被要求使用只接受動態分配對象的容器類。我對變量'a'發生了什麼事情感到好奇。在第二個例子中,使用了相同的引用,但在第一個中,我不確定是否在內存中創建了新引用,並且在程序退出之前舊引用會在堆棧中。從你所說的話,即使我重新聲明它是一個整數,也使用相同的參考? – gsingh2011 2012-04-15 03:32:56
它們基本上是相同的,幾乎肯定會編譯相同。即使它們不是,你正在做堆分配的事實比另外一個堆分配的成本要高得多。
儘管首選,但它具有更嚴格的範圍。
你在這裏使用'new'有什麼原因嗎? – Pubby 2012-04-15 03:26:20
我有一個需要動態分配對象的容器類。而且我只是好奇。 – gsingh2011 2012-04-15 03:27:26