【问题标题】:How do i create multiple class objects that doesn't delete itself after a loop如何创建多个在循环后不会自行删除的类对象
【发布时间】:2020-07-09 14:35:06
【问题描述】:

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

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

【问题讨论】:

  • 请将您的代码作为文本直接发布在您的问题中,而不是发布代码图像的链接。
  • 经过一些调试,我发现地图只保存了 1 个对象,而不是 5 个,这是为什么 -- 您正在存储局部变量的地址。当该局部变量被破坏时会发生什么?
  • 必须是指针吗?
  • 确切地说,您的代码必须被修复,而不是改进。作为快速修复,您可以将 tmp 声明为 EnemySprite* 并使用 new 对其进行初始化。

标签: c++ sdl-2


【解决方案1】:

除非EnemySpritetmp 被定义为宏,否则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));

【讨论】:

  • 没有投反对票,但更喜欢按值或智能指针存储;大多数人不应该写new
  • 好的,成功了!感谢您的建议。去读动态内存分配^^为帮助马人欢呼!!!!!!!!!
猜你喜欢
  • 2014-03-03
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2023-03-24
  • 2021-06-14
相关资源
最近更新 更多