Hirdetés
- Milyen TV-t vegyek?
- Apple asztali gépek
- Siet tisztázni az RX 5000/6000 sorozat jövőjét az AMD
- AMD Navi Radeon™ RX 9xxx sorozat
- Amlogic S905, S912 processzoros készülékek
- Pánikban a világ a Radeon RX 5000 és 6000 sorozat támogatása miatt
- HiFi műszaki szemmel - sztereó hangrendszerek
- TCL LCD és LED TV-k
- Szünetmentes tápegységek (UPS)
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
Ú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!
- Milyen TV-t vegyek?
- Még nincs is Vivo X300 Ultra, de már a nemzetközi kameratrónra pályázik
- Apple asztali gépek
- PlayStation 5
- Siet tisztázni az RX 5000/6000 sorozat jövőjét az AMD
- EA Sports WRC '23
- Autós topik
- AMD Navi Radeon™ RX 9xxx sorozat
- Az AI miatt biztonságosabb az Android, mint az iPhone
- Amlogic S905, S912 processzoros készülékek
- További aktív témák...
- ASUS ROG Strix SCAR 17 prémium gamer laptop, Ryzen 9 5900HX, RTX 3080, karcmentes állapotban
- ÚJ, BONTATLAN Samsung Neo QLED 4K Smart TV-k 2025 - GYÁRTÓI garanciával
- MacBook Air M4 13" 16/256GB 2028.07.24. iSTYLE jótállás 21 töltés
- Dell Latitude 5450 14" FHD IPS i7-1355U 16GB 512GB NVMe ujjlolv IR kam gar
- Lenovo Legion 5 brutális gamer laptop munkaállomás, i9-14900HX, RTX 4060, szép állapotban
- Bomba ár! Lenovo ThinkPad T440s - i5-4GEN I 8GB I 128GB SSD I 14" HD+ I Cam I W10 I Garancia!
- Sanyo akkutöltő + 2 használható akku
- Bomba ár! Lenovo ThinkPad Yoga X390 - i5-8365U I 16GB I 256SSD I 13,3" FHD Touch I Cam I W11 I Gari!
- Gamer PC-Számítógép! Csere-Beszámítás! I7 12700E / RTX 3070Ti / 32GB DDR5 / 1 TB SSD
- Garmin USB ANT Stick jeladó eladó
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest


