A fenntartható rendszerek fejlesztése
A DBConnection :: create () függvény hívja a attach () függvényt, így miután befejezte az objektummal való munkavégzést, meg kell szabadítania a rögzített kapcsolatot kifejezetten a detach () meghívásával. Megjegyzés: DBClient osztály kezeli a kapcsolatot a vasúti közlekedést destruktorok végén a program két tárgy DBClient csökkenti a referencia szám (hívás detachQ funkciók örökölt DBConnection Megszámlálható). Az adatbázishoz való kapcsolódás zárt (a virtuális diszkrét számláló miatt), amikor a számláló nullára esik, miután megsemmisítette a c1 objektumot.
A funkcionalitás örökléssel történő összekapcsolása gyakran sablonokkal történik, így a felhasználó kiválaszthatja a kívánt verziót a fordítási szakaszban. Ez lehetővé teszi a referenciaszámlálás különböző mechanizmusainak használatát a DBConnection újbóli meghatározása nélkül. Íme, hogyan kell csinálni:
A funkcionalitás paraméterezett csatlakoztatása
#ifndef DBCONNECTION H
# def1ne DBCONNECTION H
osztályú DBConnection. nyilvános adatbázis, nyilvános számláló
DBConnection (const DBConnectionS): Ne másolja
DBConnectionSt operator = (const DBConnection): védett:
DBConnection (const string dbStr) dob (DatabaseError). Adatbázis (dbStr)
statikus DBConnection * createCconst string dbStr) dob (DatabaseError)
DBConnection * con = új DBConnection (dbStr):
assert (con-> refCount () == 1): return con:
Egyéb szükséges funkciók.
#endif DBC0NNECTI0N2 H III: -
Az egyetlen változás a sablon előtag megjelenése az osztálydefinícióban (és a számláló számlálójának átszámozása az egyértelműség érdekében). Osztály az adatbázishoz való hozzáférés is kell tenni egy sablonparaméterrel (ha volt néhány osztály a hozzáférés, melyek közül választott ki a kívánt opciót), de ezúttal az osztály már teljesen független. A következő példában, a végrehajtás első Megszámlálható telt, mint a sablon érv, de ugyanúgy lehet használni bármilyen típusú, amely megvalósítja a megfelelő interfész (csatolja (), le (), stb ...):
Csatlakoztatás a sablonon keresztül
Ha egy származtatott osztály örököl, a bázis osztály összes változójának másolatai szerepelnek. A következő program bemutatja a több alapvető alobjektum lehetséges elhelyezését a memóriában:
Subobjektumok elhelyezése a memóriában
több örökséggel
a névtér std használata:
C. osztály nyilvános A. public In
int mainO cout c == c endl: Az egyes fajta eredmények a fordítótól függenek. DBConnection DBClient (DBConnection int mainO DBConnection assert (db-> refCount () == 2);> III: - A többféle plug-in osztály közös mintája így néz ki: tempiate osztály Tárgy. nyilvános Mixinl. Bár a fordító nem talált hibát. A probléma azonban megoldható a dinamikus operátor használatával - a részleteket lásd az előző fejezetben. A * ap = a következővel: B * bp = e; cout ar == statikus öntött cout bp == statikus leadás C * cp = statikus öntött cout cp == statikus leadás cout bp == cp? boolalpha (bp == cp) endl: / * Eredmény: sizeof (A) == 4 s1zeof (B) == 4 sizeof (C) == 12 c == 1245052 ap == 1245052 bp == 1245056 cp == 1245052 bp == cp? igaz 0 Amint láthatja, a c objektum b alobjektuma a teljes objektum kezdetétől 4 bájtnyi távolságra van. A következő memória struktúrát feltételezzük:Kapcsolódó cikkek