Hirdetés
- Honor Magic V5 - méret a kamera mögött
- Xiaomi 15T Pro - a téma nincs lezárva
- Xiaomi 15T - reakció nélkül nincs egyensúly
- Bemutatkozott a Poco X7 és X7 Pro
- Google Pixel topik
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Olyan lesz a Google Térkép, mint a segítőkész haver az anyósülésen
- Csőtörés lett a Red Magic 11 Pro gyötréstesztjéből
- Megjelent az iOS 26.1 és iPadOS 26.1
- Yettel topik
Új hozzászólás Aktív témák
-
dobragab
addikt
válasz
jattila48
#3064
üzenetére
Az std::string filename RAII-ra átalakításánál úgy gondoltam, a kissé kreatívabban oldod meg. Pl. kap még egy paramétert a privát ctor, ami átveszi az erőforrást, és felszabadítja. Így effektíven a D-nek a read_from_file a konstruktora. A hármas szabállyal most nem tököltem.
class D : public B
{
std::string filename;
FILE * fp = nullptr;
D(FILE * fp,
std::string const& filename,
std::vector<std::string> const& param1,
std::map<int, int> const& param2) :
B{param1, param2},
filename{filename},
fp{fp}
{ }
public:
static D read_from_file(std::string const& filename)
{
fp = fopen(filename.c_str(), "r+b");
std::vector<std::string> myvec;
std::map<int, int> mymap;
// load data from file to my___
return D{fp, filename, myvec, mymap};
}
virtual void pure_virtual_func() override
{ }
virtual ~D()
{
fclose(fp);
}
};Tehát a fájl megnyitás, és a memória terület foglalás nem a D ctor-ában történik, viszont az erőforrás felszabadítást (legalábbis a fájl lezárást) a dtor-ban akarod megoldani.
Nem ott van, szándékosan. Ha jól értem, B leszármazottai abban különböznek egymástól, hogy más külső reprezentációja. B-nek az a dolga, hogy ezeken felülemelkedjen, nélkülük legyen teljes értékű. Épp ezért B-nek nem szabad függnie tőle, azt oldják meg a leszármazottak.
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.
Ez egy felemás RAII lenne, ami szerintem koncepcionálisan hibás.
std::shared_ptr és make_shared? Szerintem ez a megoldás pont arra hasonlít. 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. Alapesetben nem kéne, hogy egy osztálynak legyen ctor-ként működő init-je.
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.
Ú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!
- LG LCD és LED TV-k
- Porszívók - akkus és klasszikus vezetékes
- Milyen billentyűzetet vegyek?
- Assetto Corsa Competizione
- Philips LCD és LED TV-k
- Gitáros topic
- Milyen monitort vegyek?
- 5.1, 7.1 és gamer fejhallgatók
- Kerékpárosok, bringások ide!
- Nem indul és mi a baja a gépemnek topik
- További aktív témák...
- AKCIÓ! HP EliteBook x360 830 G7 i5-10210U 16GB 512GB 1 év garancia
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- GYÖNYÖRŰ iPhone 13 Pro Max 128GB Silver -1 ÉV GARANCIA - Kártyafüggetlen, MS3551,100% Akkumulátor
- HIBÁTLAN iPhone 14 Pro 256GB Deep Purple -1 ÉV GARANCIA - Kártyafüggetlen, MS3516, 94% Akkumulátor
- FELVÁSÁRLÁS A GYŐRÚJBARÁTI BOLTUNKBAN!
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő


