如果我在堆棧上創建一個對象並將它推入一個列表中,那麼該對象將會丟失該作用域(在下面的示例中,在for循環之外)是否該對象仍然存在於列表中?如果列表仍然包含對象,那麼數據現在無效/可能會損壞?C++堆棧內存仍然有效嗎?
請讓我知道,請解釋的理由..
感謝, JBU
class SomeObject{
public:
AnotherObject x;
}
//And then...
void someMethod()
{
std::list<SomeObject> my_list;
for(int i = 0; i < SOME_NUMBER; i++)
{
SomeObject tmp;
my_list.push_back(tmp);
//after the for loop iteration, tmp loses scope
}
my_list.front(); //at this point will my_list be full of valid SomeObjects or will the SomeObjects no longer be valid, even if they still point to dirty data
}
編輯:所以,如果它是一個std::list<SomeObject*> my_list
;而不是列表...在這種情況下它會失效嗎?
您在底部編輯的評論很難分析。你想問什麼? – swestrup 2010-04-16 23:28:50
哎呀,是啊我的意思是問它看起來像這樣它仍然是有效的:std :: list my_list; for(){SomeOjbect tmp; my_list.push_back(&tmp);) –
jbu
2010-04-16 23:30:45
如果你這樣做了,你會把這個tmp變量的地址推到列表中,每次迭代之後,tmp被銷燬,相應的列表條目現在指向一個其析構函數叫做* *指向堆棧內存,可能被別的東西替換 如果你要添加指針到這個列表,你需要確保對象的生命期超過列表的內容,否則你的指針可能引用垃圾 – lhumongous 2010-04-17 00:37:06