【发布时间】:2011-07-18 17:14:15
【问题描述】:
在我的 c++ 应用程序中,我创建了一些指向对象的指针并将它们添加到两个向量中。然后我遍历一个向量,直到找到一个满足所需条件的对象。如果它满意,我想将该指针设为 NULL。最主要的是我想在所有地方都将其设为 NULL。示例代码如下。
#include <vector>
class Circle
{
public:
Circle(int _iArea){iArea = _iArea;};
~Circle(){};
void SetArea(int _iArea){ iArea = _iArea;};
int GetArea(){return iArea;};
private:
int iArea;
};
int _tmain(int argc, _TCHAR* argv[])
{
Circle* pCircle1 = new Circle(10);
Circle* pCircle2 = new Circle(20);
Circle* pCircle3 = new Circle(30);
Circle* pCircle4 = new Circle(40);
std::vector<Circle*>vector_test1;
vector_test1.push_back(pCircle1);
vector_test1.push_back(pCircle2);
vector_test1.push_back(pCircle3);
vector_test1.push_back(pCircle4);
std::vector<Circle*>vector_test2;
vector_test2.push_back(pCircle1);
vector_test2.push_back(pCircle2);
vector_test2.push_back(pCircle3);
vector_test2.push_back(pCircle4);
std::vector<Circle*>::iterator itrVecTest1 = vector_test1.begin();
std::vector<Circle*>::iterator itrVecTest1End = vector_test1.end();
while(itrVecTest1 != itrVecTest1End)
{
int iType = (*itrVecTest1)->GetArea();
if(iType ==10)
{
delete (*itrVecTest1);
*itrVecTest1 = NULL;
}
++itrVecTest1;
}
retrun 0;
}
这里 pCircle1 满足给定条件,我想从所有地方删除它。使用此代码,我可以使 vector_test1 中的指针为空。但是有没有一种方法可以同时在 vector_test2 中设置相同的指针而无需遍历它?
【问题讨论】:
-
也许你应该重新评估你想要做什么。为什么你必须使用指针?另请注意,此代码泄漏,例如:
Circle* pCircle1 = new Circle(10); Circle* pCircle2 = new Circle(20);,如果new Circle(20);抛出然后指向 pCircle1 的内存将被泄漏。此外,pCircle2 .. 4 中的任何一个都不会在任何执行路径中释放。
标签: c++