我有一个名为Object
的类,其定义如下:
#include "Object.hpp"
Object::Object()
{
id = 0;
}
int Object::Id()
{
return id;
}
void Object::setId(int i)
{
id = i;
}
我有一个容器类,它包含一堆名为Object
的{{1}}个DataSet
。我目前正在std::vector
中持有它们。在DataSet
标题文件中,我有我想要执行的这些功能,而且我还有std::vector
Object
个:
class DataSet{
public:
std::vector<Object*> objects;
DataSet();
~DataSet();
int addObject(Object *object);
void clear();
int deleteObject(Object *object);
int getSize();
};
由于我的Object
现在基本上只与ID相关联,因此我希望能够使用查找和删除具有特定ID的Object
。但是,在调用objects.erase
时,我最终会遇到段错误。这是我的方法:
int DataSet::deleteObject(Object* object)
{
std::vector<Object*>::iterator iterator;
if(object) {
iterator = find(objects.begin(), objects.end(), object);
delete *iterator;
objects.erase(iterator); // seg fault
}
return 1;
}
在我的driver
中,以下是我通过ID删除内容的方法:
void execRemove(int id)
{
DataSet dm;
Object *temp = new Object();
temp->setId(id);
dm.deleteObject(temp);
}
为什么在迭代器上调用erase
会导致seg错误?同样在我的deleteObject
我的唯一要求是我使用iterator
和find
,因为我正在衡量从{{1}移除Object
所需的时间数百万。
编辑:作为旁注,这个std::vector
正在通过这样做来初始化:
DataSet
调用for(int i = 0; i < 1000000; ++i) {
Object* object = new Object();
object->setId(i);
dm.addObject(object); // dm is our dataset container
}
会导致段错误,即使execRemove(20)
肯定有dm
。