dimanche 5 mars 2017

How to prevent a unordered_map of shared pointers from leaking?

I am building a console application in wich I am only using smart pointers. I made the choice to only use smart pointers to learn when to use which smart pointer. In this application, I am trying to use a state pattern to switch between the different states. The base class is TurnState from this class all the other state-classes inherit.

In the gamecontroller, I have defined the current state. For switching between the states I want to use an unordered_map with an enum as key and the state class as value. But as soon as I wrote down std::unordered_map<TurnStateEnum, std::shared_ptr<TurnState>> _turn_states_map; inside the header I got some memory leaks.

To get rid of those memory leaks I tried to destroy them in the deconstructor like this:

GameController::~GameController()
{
    for (std::unordered_map<TurnStateEnum, std::shared_ptr<TurnState>>::iterator iterator{ _turn_states_map.begin() }; iterator != _turn_states_map.end(); iterator++) {
        iterator->second.reset();
        _turn_states_map.erase(iterator);
    }
    _turn_states_map.clear();
}

But that did not work out either. I was able to solve it using raw pointers but that is not what I am trying to achieve. So my question is, how do I delete a map with shared_ptrs in the correct way?

All help will be appreciated.

Aucun commentaire:

Enregistrer un commentaire