- Magga: PLEX: multimédia az egész lakásban
- gban: Ingyen kellene, de tegnapra
- Mr Dini: Mindent a StreamSharkról!
- Klaus Duran: 2025 dude
- kraftxld: Untappd lista
- chopin42: A (netes) társkeresés labirintusában #3:avagy... :(
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- btz: Internet fejlesztés országosan!
- laskr99: Újrakezdem a processzor és videókártya szilícium magok fotózását
Új hozzászólás Aktív témák
-
jattila48
aktív tag
válasz
dobragab #3067 üzenetére
De hát a fájl lezárás most is a dtor-ban van, de nem a ctor-ban van a megnyitás.
B leszármazottai abban különböznek egymástól, hogy más-más helyről olvassák be az egyébként ugyanolyan formátumú bináris adatot. Tehát a leszármazott osztályok egyetlen dolga, hogy ezt megtegyék, és a blob-ot átadják az ősosztálynak (erre van az init). A B nem függ a leszármazottaktól, mert ő már csak a blob-on dolgozik, de nincs értelme önálló B objektumot létrehozni, mert a blob-ot mégis csak be kell olvasni valahonnan.
"Tényleg jobb lenne D konstruktorába pakolni az allokációt, de ebben a formában nem lehet megoldani. Az ős-ctor hívása mindenképp előbb van, mint a ctor törzse, úgyhogy arra nincs esélyed normálisan megoldani."
Hát pont erről beszélek. Ha viszont a D ctor-ában szeretném megoldani az allokációt, akkor mindenképpen B::init-et kell hívnom a D ctor-ának törzsében. Ez lehet, hogy szerinted nem normális megoldás (alapesetben szerintem sem az), de mivel hogy B nem példányosítható, ezért elnézhetőnek tartom. Ha ezt nem teszem meg, akkor valóban csak ez a fajta factory megoldás marad amit írtál, azonban itt az erőforrások átvétele (shared vagy unique pointerek vagy egyéb erre a célra létrehozott osztályok formájában) sokkal macerásabb és több hibalehetőséget rejt, mint az init fv."Mindenesetre a kötelezően hívandó init() szerintem ennél sokkal büdösebb: el lehet felejteni a hívását, és B többet tud, mint a feladata."
Mint ahogy fent írtam, szerintem nem, de ez már ízlés kérdése. Azt hogy el lehet felejteni a hívását, ennyi erővel D bármely más tagjának az inicializálását is el lehet felejteni, ahogy írtam. Tulajdonképpen úgy tekinthető, hogy az init nem a B-t inicializálja, hanem a D inicializálásához szükséges. "Normál" esetben is szokás a ctor-ban különböző tagokat inicializáló fv.-eket hívni. B egyáltalán nem tud többet mint a feladata, mert a forrásról semmit sem tud, csak a blob-ot kapja meg, ami minden leszármazott esetén ugyanolyan formátumú.
"Alapesetben nem kéne, hogy egy osztálynak legyen ctor-ként működő init-je."
Valóban. De ha nem példányosítható? Erről szólt az egész elmélkedésem."Kicsit más jellegű lenne az a megoldás, ha B kap tisztán virtuális read() és write() függvényeket, és azokat override-olja D. Viszont read()-et nem hívhatod ctorból, úgyhogy ez nem működik."
Azon kívül, hogy ctor-ból nem működik, nem lehet megcsinálni, mert forrásonként különböző paraméterezést igényelne. Másrészt ekkor már tényleg fölöslegesen sokat tudna a B és függne a leszármazott osztálytól.
Minden esetre köszönöm az eddigi hozzászólásaidat, most ezt a kétféle megoldást látom alkalmasnak, a mondott okok miatt azonban a sajátomat fogom választani.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Kuponkunyeráló
- Google Pixel topik
- Magga: PLEX: multimédia az egész lakásban
- Honor 400 Pro - gép a képben
- gban: Ingyen kellene, de tegnapra
- PlayStation 5
- Túra és kirándulás topic
- Hisense LCD és LED TV-k
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- Hamarosan rézhiánytól szenvedhet az egész chipgyártás
- További aktív témák...
- Samsung Galaxy Watch Ultra + Trail Band
- BESZÁMÍTÁS! SAPPHIRE Pulse OC RX 9060 XT 16GB GDDR6 videokártya 27% áfa 3 év garancia
- PNY EPIC-X RGB RTX 5060Ti 16GB / Gigabyte EAGLE OC RTX 5070 12GB videokárty 3 év garancia 27% áfa
- Samsung Galaxy A35 5G 128 GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! 850W ASUS ROG STRIX 80 PLUS Gold White Edition (90YE00A4-B0NA00) 3 év garancia 27% áfa
- Csere-Beszámítás! Asztali számítógép játékra! I5 14400F / RX 6900 XT 16GB / 32GB DDR5 / 1TB SSD
- Lejárt a gyártói garancia? Mi tovább támogatjuk az IT infrádat!
- AKCIÓ! ASRock B85M Pro4 B85 chipset alaplap garanciával hibátlan működéssel
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
- Telefon felváráslás!! Xiaomi Redmi Note 11, Xiaomi Redmi Note 11 Pro, Xiaomi 11 Lite
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest