gpt4 book ai didi

c++ - 解除分配后删除(悬挂)指针的 vector 元素

转载 作者:行者123 更新时间:2023-11-30 01:47:28 25 4
gpt4 key购买 nike

在堆上释放内存后 - vector 中仍保留(悬空)指针。如何完全删除 vector 元素?

vector<Obstacle*> obstacles; 
vector<Action*> actions;

void Game::free(GameFactory *gFact) {

obstacles = gFact->getObstacles();
actions = gFact->getActions();
destroyVectorElements(obstacles);
destroyVectorElements(actions);
}

template<typename T>
void destroyVectorElements(vector<T> &vec) {
typename vector<T>::iterator start=vec.begin(), stop=vec.end(), it;
for(it=start; it!=stop; ++it) {
delete (*it);
}
}

解除分配有效,但 vector 列表仍然存在悬空指针。

最佳答案

在删除迭代后调用 vec.clear()。

template<typename T>
void destroyVectorElements(vector<T> &vec) {
typename vector<T>::iterator start=vec.begin(), stop=vec.end(), it;
for(it=start; it!=stop; ++it) {
delete (*it);
}
vec.clear();
}

关于c++ - 解除分配后删除(悬挂)指针的 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31560282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com