Commit 12619eaf by Karsa Zoltán István

init

parents
# StringPool
A következő szorgalmi feladatban az erőforrásszűkében gyakran használt ObjectPool mintát fogjuk megvalósítani. Bár a minta általánosságban használható, illetve több nyelv alatt is elérhető valamilyen speciális változata (látsd: ThreadPool, ConnectionPool), mi ezek megvalósítására nem törekszünk, csak String-ek kezelésére fogjuk használni.
A minta alkalmazására olyan esetben lehet szükség, ha viszonylag gyorsan, sok objektum keletkezik és szűnik meg. Ezek az objektumok létrehozása és felszabadítása pedig lassú is. Az objektumok tekinthetőek bizonyos erőforrásoknak is, amik szűk keresztmetszettel érhetők csak el.
Általában ezek a következő alap fügvényekkel rendelkeznek:
- Resource& acquire(): Azon erőforrásokból, amik szabadok a csoportban visszaad egy referenciát és innentől az adott erőforrás foglaltnak minősül.
- void release(Resource&): A kliens (hívó fél) visszaadja az objektumot, így az szabaddá válik.
- Konstruktor, amivel az erőforráscsoport (pool) méretét lehet megadni
Ugyanakkor a hagyományos "pooling" mintát kiterjesztjük további funkciókkal a String-ek kezelésére szabva:
- A konstruktorral nemcsak a pool-ban lévő string objektumok számát megadni, hanem azok kezdő méretét (mekkora legyen a karaktertömb) is.
- Egy string objektum elkérésekor megadható, hogy minimum mekkorának kell lennie a karaktertömb kapacitásának (ez nem a string hossza).
-
\ No newline at end of file
class MyString {
public:
size_t size();
size_t capacity();
};
class StringPool {
public:
// Létrehoz obj_num db MyString obejktumot,
// melyek kapacitása init_cap méretű
StringPool(size_t obj_num, size_t init_cap);
// Visszaad egy szabad MyString objektumot ami
// legalább capacity kapacitással rendelkezik
// Ha nincs ilyen a pool-ban, akkor létrehoz egyet
MyString& acquire(size_t capacity);
// Ezután a visszaadott str objektum újra
void release(MyString& str);
};
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment