c++ - 创建一个子类 vector ?

标签 c++ arrays vector

我一直在使用动态数组,但我不得不添加和删除项目。我读过不建议使用 realloc 或在可以简单地使用 std::vector 时调整数组的大小,但是我在将数组更改为 vector 时遇到了问题。

这是我当前的代码:

int main(){
    // This is what I'm doing now
    State*arr[3];
    int pos = 0;
    arr[0] = new Menu();
    // How do I change it to a vector? This is what I'm trying:
    std::vector<State> vec;
    vec.push_back(Menu());
    ...
}

但是我不断收到错误消息:“无法分配抽象类型‘State’的对象”我做错了什么?


这些是状态和菜单类:

class State
{
public:
    virtual ~State() {};
    virtual void capture_events() = 0;
    virtual void logic() = 0;
    virtual void render() = 0;
};

Menu : public State
{
public:
    Menu();
    ~Menu();
    void capture_events();
    void logic();
    void render();
};

最佳答案

你需要额外的间接寻址,因为 State是一个多态基类。您可以使用 std::unique_ptr 执行此操作来自 <memory> .

#include <memory>

std::vector<std::unique_ptr<State>> states;
states.emplace_back(new Menu());

使用std::unique_ptr<State>很重要而不是 State* ,因为异常安全。请考虑以下事项:

std::vector<State*> states;
states.push_back(new Menu());
foo(); // what if foo throws an exception?
       // the next line wouldn’t get executed!
for (auto ptr : states) delete ptr;

相比之下,std::unique_ptr使用 RAII确保在 vector 超出范围时始终删除对象,即使在提前返回或异常的情况下也是如此。如需进一步引用,请参阅 The Definitive C++ Book Guide and List .

关于c++ - 创建一个子类 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19336746/

相关文章:

c++ - 创建自定义类型对象的 vector

c++ - 事件 wxWidgets

c++ - 显示列表的并行处理

c - 在c中打印出字符串数组的元素

java - 数组错误越界

C++ 使用 std::accumulate 生成 map<int,int>

c++ - 用于类初始化的 SFML vector

c++ - 完美预测分支的分支预测开销

c++ - 为结构内部的指针 vector 分配内存

arrays - 如何计算 3D 坐标的线性索引,反之亦然?