Проблема с созданием шаблона ООП "State"
Имеется функция, в которую передаются некоторые параметры. Я хочу в зависимости от этих параметров, сделать разветвление и соответственное выполнение функции. Но при вызове функции request происходит ошибка std::bad_alloc. В чём может быть проблема?
class State{
public:
virtual void handle(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, int& begin) = 0;
};
class ConcreteStateA : public State {
public:
void handle(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, int& begin) override {
ScheduleCH.push_back(tokens[begin]);
ScheduleZN.push_back(tokens[begin]);
ScheduleCH.push_back(tokens[begin + 1]);
ScheduleZN.push_back(tokens[begin + 2]);
begin += 3;
}
};
class ConcreteStateB : public State {
public:
void handle(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, int& begin) override {
ScheduleCH.push_back(tokens[begin]);
ScheduleZN.push_back(tokens[begin]);
ScheduleCH.push_back(tokens[begin + 1]);
ScheduleZN.push_back(tokens[begin + 1]);
begin += 2;
}
};
class Context{
private:
State* state;
public:
Context() : state(nullptr){};
void set_state(State* s){
delete[] state;
state = s;
}
void request(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, int& begin){ state->handle(ScheduleCH, ScheduleZN, tokens, begin); }
};
void ScheduleParser::fill_weeks(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, std::vector<std::string> days, std::vector<std::string> time){
for (int j = 0; j < 6; j++){
for (int i = 0; i < tokens.size(); i++){
if (tokens[i] == days[j]){
ScheduleCH.push_back(days[j]);
ScheduleZN.push_back(days[j]);
int begin = i + 4;
for (int k = 1; k < 8; k++){
Context* context;
if (tokens[begin + 2] != time[k]){
context->set_state(new ConcreteStateA());
}
else{
context->set_state(new ConcreteStateB());
}
context->request(ScheduleCH, ScheduleZN, tokens, begin);
delete[] context;
}
}
}
}
}