说我有一个向量,其中包含指向动态内存的指针,但也包含在堆栈中声明的变量的地址,是否有一种方法可以安全地循环访问并仅删除动态内存,还是仅限于使用其中一种?或者正在做以下安全?我想也许根据编译器的结果是不可预测的。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