Преобразование кода C++98 в новый код C++17 при использовании указателей std::vectorC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Преобразование кода C++98 в новый код C++17 при использовании указателей std::vector

Сообщение Anonymous »

Я не знаю, чем управлять или чем меньше, так как я могу управлять необработанными указателями. Обратите внимание, что в примере мне нужно удалить объект перед удалением его из вектора. Я хочу избежать этого здесь и в дальнейшем.
Что будет хорошим вариантом для преобразования этого кода в использование unique_ptr илиshared_ptr
class GameState
{
public:
virtual bool onEnter() = 0;
virtual bool onExit() = 0;
virtual std::string getStateID() const = 0;
};

class MenuState : GameState
{
public:
MenuState(){};
virtual ~MenuState(){};
bool onEnter(){};
bool onExit(){};
std::string getStateID() const;
private:
static const std::string s_menuId;

};

class StateMechine
{

public:
void pushState(GameState* pState)
{
m_gameStates.pop_back(pState);
m_gameStates.back()->onEnter();
}

void changeState(GameState* pState)
{
if(!m_gameStates.empty())
{
if(m_gameStates.back()->onExit())
{
delete m_gameStates.back();
m_gameStates.pop_back();
}
}
}

private:
std::vector m_gameStates;
}

int main(int argc ,char** argv)
{
GameState *gs = new MenuState();
StateMechine sm;
sm.pushState(gs);
sm.changeState(gs);
}


Подробнее здесь: https://stackoverflow.com/questions/753 ... f-pointers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»