- Monitortrió a Samsungtól, köztük egy 500 Hz-es QD-OLED-del
- AI-alapú felskálázót fejleszt az ultramobil piacra az ARM
- Új Vulkan implementációt hoz az Apple rendszerchipekre a LunarG
- Az OpenAI szerint Musk zaklatási kampányt indított, a bíró nem állt Musk mellé
- Kiválthatja az AI az egeret és a billentyűzetet?
- Milyen TV-t vegyek?
- AI-alapú felskálázót fejleszt az ultramobil piacra az ARM
- Kiválthatja az AI az egeret és a billentyűzetet?
- Amlogic S905, S912 processzoros készülékek
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- ThinkPad (NEM IdeaPad)
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- Először égett le egy újságnál a GeForce RTX 5090
- Belépőszintű M.2-es SSD-t prezentált a Team Group a PCI Express 4.0-s halmazban
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
Új hozzászólás Aktív témák
-
jattila48
aktív tag
Kétfázisú inicializálás az, amikor az objektumot a konstruktora nem inicializálja teljesen, hanem még egy inicializáló tfv.-t kell meghívni ahhoz, hogy az objektum használható legyen. Akkor szokták használni, ha az inicializálás során virtuális tfv.-t kell meghívni, vagy a konstruktor nem dobhat exception-t. A kétfázisú inicializálást általában kerülendőnek tekintik. Azonban szerintem kifejezetten hasznos is lehet, és nagyban egyszerűsítheti a megfelelő resource kezelést pl. memory leak elkerülésére használható. Ha pl. van egy objektumunk, aminek inicializálása során két memória foglalást végez, előfordulhat hogy az első allokáció sikeres, a második pedig nem. Konstruktorral megoldva ilyenkor auto_ptr-t használhatunk, mert az első pointert fel kell szabadítani, mielőtt a második allokáció sikertelensége miatt a konstruktor exception-t dob. Ilyenkor az objektum destruktora nem fut le, mert csak teljesen megkonstruált objektumra fut le a destruktor, ha az kilép a scope-ból. Na már most kétfázisú inicializálással az objektumot a konstruktora úgy hozza létre, hogy a szóban forgó két pointert NULL-lal inicializálja, majd az inicializáló tfv. elvégzi a szükséges allokációkat. Ha valamelyik allokáció nem sikerül, akkor az init tfv. exception-t dob, vagy false-val tér vissza, de a sikertelen allokáció eredményeként a pointer NULL marad. Az objektum destruktora csak a nem NULL pointert szabadítja fel, a NULL-t békén hagyja.
class A {
public:
A():c(NULL),d(NULL){}
~A();
bool init(int,int);
private:
char * c;
char *d;
}A::~A()
{
if(c!=NULL)delete[] c;
if(d!=NULL)delete[] d;
}bool A::init(int n,int m)
{
c=new char[n];
d=new char;
return true;
}void main(void)
{
try{
A a; //Ez mindenkepp lefut, nem dob exception-t
a.init(10,0x7fffffff); //A::d-nek tul nagy memoriat akarunk foglalni, ezert exception-t dob
}
catch(std::bad_alloc &){
std::cout << "Memory allpc error";
}
//Itt a lefoglalt A::c felszabadult, nincs memory leak
}A lényeg az, hogy a try blokk végén az A destruktora lefut, mert az A a objektum konstruktora mindenképp lefutott. Kicsit olyan ez, mintha az A osztály maga is egy "smart pointer" lenne.
Mit szóltok hozzá? Ugye nem is feltétlenül rossz a kétfázisú inicializálás?
Ú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!
- Autós topik
- Horgász topik
- Milyen TV-t vegyek?
- AI-alapú felskálázót fejleszt az ultramobil piacra az ARM
- Pajac: Átlátszó fém
- Kiválthatja az AI az egeret és a billentyűzetet?
- Peugeot, Citroën topik
- Amlogic S905, S912 processzoros készülékek
- Béta iOS-t használók topikja
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- További aktív témák...
- HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1165G7 16/512 Iris Xe FHD
- ASUS ROG Gaming PC 14900K // RTX 5070 Ti // 32GB RAM
- Kedvező áron! Eladó TP-Link TL-SG2008P Omada SDN POE+ Alza Gari 2029.11
- Eladó Unifi US-8-60W POE Switch
- 8 DARAB! HP ELITEBOOK LAPTOP (Tartós, Elnyűhetetlen) 850 G8, 840 G8, 840 G9, 830 G8 x360
- Telefon felvásárlás!! Apple Watch Series 9/Apple Watch Ultra/Apple Watch Ultra 2
- Ryzen 7 5800XT: Gyorsabb, Erősebb, Tiéd lehet még ma! Rèszletre is!
- Honor Pad X8 64GB, Wi-Fi, 1 Év Garanciával
- Telefon felvásárlás!! Xiaomi Redmi Note 10, Xiaomi Redmi Note 10s, Xiaomi Redmi Note 10 Pro
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: FOTC
Város: Budapest