說我有一個向量,其中包含指向動態內存的指針,但也包含在堆棧中聲明的變量的地址,是否有一種方法可以安全地循環訪問並僅刪除動態內存,還是僅限於使用其中一種?或者正在做以下安全?我想也許根據編譯器的結果是不可預測的。std向量保存指針和變量地址。清理?
std::vector<int*> theInts;
int* i = new int;
*i = 1;
theInts.push_back(i);
int j = 2;
theInts.push_back(&j);
std::vector<int*>::iterator iIt=theInts.begin();
for(;iIt<theInts.end();iIt++)
delete *iIt;
編輯: 我臨時改變了一些事情要使用原始指針,而我看着共享指針,在此期間可能會有人告訴我,如果以下是安全的?它的一個細分版本的什麼我的程序現在正在做
vector<int*>theInts;
int* anInt = new int;
theInts.push_back(anInt);
if(NULL != anInt)
delete anInt;
anInt = NULL;
vector<int*>::iterator bIt = theInts.begin();
for(;bIt!=theInts.end();bIt++)
{
int* aInt = *bIt;
if(NULL!=aInt)
delete aInt;
aInt=NULL;
}
theInts.clear();
最好的辦法是創建一些形式的智能指針,它知道指向內存是否需要刪除,並存儲這些指針的向量。 – Nick 2012-03-15 10:49:00
不知何故,在一個向量中混合使用局部變量和動態分配的對象感覺不對。你如何來到這一點? – 2012-03-15 10:59:39
它很難回答,但我可以把它放在一開始就糟糕的計劃,即時優化舊軟件作爲端口作品集使用。我使用一個單獨的矢量來遍歷界面引擎中的按鈕,一些按鈕是通過createButton()中的new創建的,有些是在程序中的其他位置創建的。理想情況下,我想他們應該都在createButton(); – 2012-03-15 11:16:51