C++ 如何创建不包含';不要在循环后删除自己

C++ 如何创建不包含';不要在循环后删除自己,c++,sdl-2,C++,Sdl 2,我一直在尝试在一个循环中创建多个对象并将其存储在地图中,但是在循环后它往往会被破坏,我理解这一点,但我想将这些对象存储在地图中以备将来使用 经过一些调试我发现地图只保存了1个对象而不是5个对象为什么会这样?我如何改进它 除非EnemySprite或tmp定义为宏,EnemySprite tmp(x,y,40,40)是一个局部变量,它将在作用域结束时销毁(本例中为一次迭代结束) 为了避免删除,您应该动态分配内存 EnemySprite* tmp = new EnemySprite(x,y,40,4

我一直在尝试在一个循环中创建多个对象并将其存储在地图中,但是在循环后它往往会被破坏,我理解这一点,但我想将这些对象存储在地图中以备将来使用

经过一些调试我发现地图只保存了1个对象而不是5个对象为什么会这样?我如何改进它


除非
EnemySprite
tmp
定义为宏,
EnemySprite tmp(x,y,40,40)
是一个局部变量,它将在作用域结束时销毁(本例中为一次迭代结束)

为了避免删除,您应该动态分配内存

EnemySprite* tmp = new EnemySprite(x,y,40,40);
SDL_Texture* tmpTex = tmp->set_image(".../enemy.png",renderer);

map.insert(std::pair<EnemySprite*, SDL_Texture*>(tmp, tmpTex));
EnemySprite*tmp=新的EnemySprite(x,y,40,40);
SDL_纹理*tmpTex=tmp->set_图像(“…/敌方.png”,渲染器);
插入(std::pair(tmp,tmpTex));

请直接在问题中以文本形式发布代码,而不是发布代码图像的链接。经过一些调试后,我发现映射只保存了1个对象,而不是5个对象。为什么?您存储的是局部变量的地址。当局部变量被破坏时会发生什么?它必须是指针吗?确切地说,你的代码必须是固定的,而不是改进的。作为一个快速解决方案,您可以声明您的tmp为EnemySprite*并用new初始化它。没有否决,但更喜欢按值或智能指针存储;大多数人都不应该写新的。好吧,那就行了!谢谢你的建议。继续阅读动态内存分配^^为帮助ma man干杯!!!!!!!!