You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量创建Enemy类实例?数组与vector哪种方案更优?

批量创建Enemy实例:选vector还是数组?

嘿,这个问题问得太贴合实际开发场景了!对于批量管理Enemy这类动态对象的需求,std::vector绝对是比原生数组更优的选择,我给你掰扯下具体原因:

为什么vector更好?

  • 动态扩容,灵活度拉满:原生数组的大小是编译期就固定死的,要是后期你想加更多敌人,得改代码重新编译;而vector会自动帮你管理内存容量,想加多少就用push_back或emplace_back,完全不用操心“容量不够”的问题。
  • 安全易用,减少bug:原生数组越界访问是未定义行为,排查起来头大;vector提供了at()方法做边界检查,还有size()能随时知道当前有多少个敌人,遍历起来用范围for循环就能轻松搞定,代码可读性也高。
  • 自动内存管理,避免泄漏:你现在用new创建Enemy指针,最后还得手动delete,很容易漏删导致内存泄漏。如果用vector<std::unique_ptr<Enemy>>(存智能指针),vector销毁时会自动帮你清理所有内存;要是Enemy对象本身不大,甚至可以直接存vector<Enemy>,连指针都不用管,省心到爆。

改写后的代码示例

这里给你两种常见的实现方式,按需选择:

方式1:用智能指针存Enemy(适合Enemy对象较大或需要多态的场景)

#include <vector>
#include <memory> // 引入智能指针头文件

void GameLoop(SDL_Window* Window, SDL_Renderer* Renderer) {
    // 用vector批量管理Enemy智能指针
    std::vector<std::unique_ptr<Enemy>> enemies;
    
    // 批量创建敌人,还可以用循环批量生成
    enemies.emplace_back(std::make_unique<Enemy>(Renderer, "S_Alien_1.bmp", 200, 100, 50, 35));
    enemies.emplace_back(std::make_unique<Enemy>(Renderer, "S_Alien_1.bmp", 260, 100, 50, 35));
    
    // 比如批量创建10个横向排列的敌人
    // for (int i = 0; i < 10; ++i) {
    //     int xPos = 200 + i * 60; // 每个敌人间隔60像素
    //     enemies.emplace_back(std::make_unique<Enemy>(Renderer, "S_Alien_1.bmp", xPos, 100, 50, 35));
    // }

    // 统一调用所有敌人的Update方法
    for (auto& enemy : enemies) {
        enemy->Update();
    }

    // 统一调用所有敌人的Draw方法
    for (auto& enemy : enemies) {
        enemy->Draw();
    }
}

方式2:直接存Enemy对象(适合Enemy对象较小、无需多态的场景)

#include <vector>

void GameLoop(SDL_Window* Window, SDL_Renderer* Renderer) {
    std::vector<Enemy> enemies;
    
    // 直接构造Enemy对象存入vector
    enemies.emplace_back(Renderer, "S_Alien_1.bmp", 200, 100, 50, 35);
    enemies.emplace_back(Renderer, "S_Alien_1.bmp", 260, 100, 50, 35);

    // 遍历调用方法(直接用对象访问)
    for (auto& enemy : enemies) {
        enemy.Update();
        enemy.Draw();
    }
}

总结

总之,在C++游戏开发里,这种需要动态管理对象集合的场景,vector是标准解决方案——它的灵活性、安全性和易用性都碾压原生数组,完全不用考虑数组的选项。

内容的提问来源于stack exchange,提问作者Samuel Walsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:24:20