#include <iostream>
#include <vector>
class Object {
// 物体类的具体实现,这里省略具体细节
};
class ObjectManager {
private:
std::vector<Object*> objects;
public:
void addObject(Object* obj) {
if (obj) {
objects.push_back(obj);
}
}
void removeObject(Object* obj) {
for (auto it = objects.begin(); it != objects.end(); ++it) {
if (*it == obj) {
delete *it;
objects.erase(it);
break;
}
}
}
~ObjectManager() {
for (Object* obj : objects) {
delete obj;
}
objects.clear();
}
};
避免数组越界的设计
addObject
函数:在addObject
函数中,通过objects.push_back(obj)
将物体指针添加到std::vector
中。std::vector
会自动管理内存并根据需要动态扩展,因此不会出现数组越界的情况。
removeObject
函数:使用for
循环和erase
成员函数来删除指定物体指针。在erase
操作后,std::vector
会自动调整其大小,并且erase
操作会移动后续元素,保证不会访问到越界位置。
- 析构函数:在析构函数中,遍历
objects
容器,释放每个物体的内存,并调用clear
方法清空容器,这一过程不会发生越界访问。
避免指针悬挂的设计
removeObject
函数:在删除物体指针时,先使用delete
释放该指针指向的内存,然后从objects
容器中移除该指针。这样,后续不会有指向已释放内存的悬挂指针。
- 析构函数:析构函数会遍历
objects
容器,释放所有物体的内存并清空容器,确保在ObjectManager
对象销毁时,不存在悬挂指针。