Vector polimorficznych wskaźników, a memory leak

0

Hej piszę projekt na zaliczenie na studia i mam taki problem:
Stworzyłem klasę z metodami wirtualnymi "Item" oraz klasy które po niej dziedziczą (Mele, Armor itp.). Mam taki vector który ma je wszystkie przechowywać "itemki_w_eq". Tu właśnie pojawia się moje pytanie czy w takim wypadku muszę się obawiać o memory leak'i, jeśli tak to w jaki sposób im zapobiec?

Klasa Mele oraz Item:

class Item
{
public:
    virtual void animacja(int nr_klatki) = 0;
    virtual void load() = 0;
};
//Klasa dla broni mele
class Mele :public Item
{
private:
    sf::Texture tekstura_eq;
    sf::Texture tekstura_postac;
    sf::Texture tekstura_attack;
    //Staty staty;
    std::string name;
public:
    Mele(std::string name) : name(name) {};
    
    virtual void animacja(int nr_klatki) override
    {
        std::cout << "a";
    }
    //funkcja do inicjacji itemu nie ma potrzeby wywolywac jesli tekstury nie beda potrzebne
    virtual void load() override
    {
        std::cout << "a";
    }
};

Tu obawiam się problemów z memory leak:

for (int i = 0; i < itemki.size(); i += 2)
    { 
        if (itemki[i + 1] == "mele")
        {
            itemki_w_eq.push_back(new Mele(itemki[i]));
        }
    }

Inicjacja itemki_w_eq:

std::vector<Item*> itemki_w_eq;
6

itemki_w_eq.push_back(new Mele(itemki[i]));

Dla każdego new musi przypadać delete inaczej mamy memory leak. Polecam jednak zaznajomić się z std::unique_ptr wtedy nie będziesz musiał pamiętać o zwolnieniu pamięci.

std::vector<std::unique_ptr<Item>> itemki_w_eq;
//..............
itemki_w_eq.push_back(std::make_unique<Item>(itemki[i]));
5

Ja jeszcze widzę problem z Item. Brakuje wirtualnego destruktora!

class Item
{
public:
    virtual ~Item() = default;
    
    virtual void animacja(int nr_klatki) = 0;
    virtual void load() = 0;
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1