gpt4 book ai didi

c++ - map 迭代器删除不调用适当的析构函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:28:11 28 4
gpt4 key购买 nike

gameObjectsstd::map<sf::String,VisibleGameObject*> , 和 resultsstd::map<sf::String,VisibleGameObject*>::iterator .运行时:

return gameObjects.erase(results);

我希望 VisibleGameObject 的析构函数能够运行,即:

VisibleGameObject::~VisibleGameObject(){
m_pSceneManager->removeSprite(name);
}

从不运行,直到持有 gameObjects 的类(class)被销毁,然后运行:

GameObjectManager::~GameObjectManager(){
std::for_each(gameObjects.begin(),gameObjects.end(),GameObjectDeallocator());
}

struct GameObjectDeallocator{
void operator()(const std::pair<sf::String,VisibleGameObject*>&p) const{
delete p.second;
}
};

然后它确实运行了。为什么第一种情况不运行?

使用 SFML 2.0

谢谢

最佳答案

erase 从容器中删除指针,但调用delete

建议:

  • 将您的 map 更改为:

    std::map<sf::String,VisibleGameObject>

    即对象不是指向它们的指针

或:

  • 根据可用性使用 shared_ptr/unique_ptr(例如 boost::shared_ptrstd::shared_ptr):

    std::map<sf::String,std::shared_ptr<VisibleGameObject> >

    哪个调用析构函数

关于c++ - map 迭代器删除不调用适当的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9443784/

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