kontener i obiekty

0

Witam,
wraz w kolegą bawimy się klasami i kontenerami. Zastanawiamy się która wersja generate() będzie najlepsza:

 #include "Item.h"

void ItemManager::generate()
{
    for(int i = 0; i < ItemAmount; ++i)
    {
        int choose = rand() % 2;
        if(!choose)
            _items[i] = new SmallItem;
        else
            _items[i] = new BigItem;
    }
}
 #include "Item.h"

Item* generateItem()
{
   Item* item;
   int choose = rand() % 2;
   if(!choose)
        item = new SmallItem;
   else
    item = new BigItem;
   return item;
}
void ItemManager::generate()
{
    for(int i = 0; i < ItemAmount; ++i)
    {
        _items[i]= generateItem();
    }
}

main.cpp:

#include <ctime>
#include "Item.h"

int main()
{
    ItemManager manager;
    manager.generate();
}
 

Item.h:

#include <iostream>
#include <random>

const int ItemAmonut = 20;
class Item
{
public:
    Item(int size)
        :_size(size)
    {

    }

protected:
    int _size;
};
class SmallItem :public Item
{
public:
    SmallItem()
        :Item(5)
    {

    }
};

class BigItem :public Item
{
public:
    BigItem()
        :Item(15)
    {

    }
};

class ItemManager
{
public:
    ItemManager()
    {
        for(int i =0; i< ItemAmonut; ++i)
            _items[i]= NULL;
    }
    void generate()
    {
        for(int i =0; i< ItemAmonut; ++i)
            _items[i] = new SmallItem;
    }

private:
    Item* _items[ItemAmonut];
};
 

Z góry dzięki za odpowiedzi :). Jeżeli żadna z podanych przeze mnie propozycji nie jest poprawna to proszę o wskazanie błędu lub napisanie poprawnej.

2
  1. Ja tu żadnych kontenerów nie widzę.
  2. Nagie new i delete to antyidiom w C++. Używaj kontenerów/smart pointerów
  3. To wyżej można pominąć jeśli w ramach nauki implementujesz własny, ale ja tego tu nie widzę

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