( geza42 | 2021. 03. 27., szo – 13:45 )

Nem úgy értettem, hogy "csak úgy", hanem úgy, hogy kivételt kellett dobnia.

Akkor úgyanúgy baj van belőle. Tudni kell, hogy mik dobhatnak exceptiont.

Nem is azt mondtam, hogy feltétlenül, hanem azt, hogy általában, le is írtam, hogy "tudom, van amikor a C++ gyorsabb és/vagy kisebb lesz."

Ok :) Még azért annyit hozzátennék az exceptionhoz, hogy azért lehet az exceptionoknak is "rejtett" költsége, ami meg újra a return code-ok felé döntheti a mérleg nyelvét. Pl., úgy kell a kódot megírni, hogy exception safe legyen. Pl., ha exception dobás van, akkor se legyen memleak. A összes fv-t fel kellene annotate-elni, ami nem dob exceptiont, hogy a fordító ezt lássa, és olyan kódot tudjon generálni, ami nincs felkészülve az exceptionokra (és emiatt gyorsabb lehet). Szóval ez meglehetősen komplex témakör.

Akkor itt volt az én fejemben a kavarodás; nem a nyelvnek az overheadjei ezek, hanem a hozzá kapcsolt stdlib-nek...

Igen, jellemzően ez van. Legalábbis nekem magával a core language-vel nem nagyon van bajom overhead tekintetében. Viszont a standard library-val már sokszor "összevesztem". Pont ezért nem használom.

Amúgy közben eszembejutott még egy core language-s exception, a dynamic_cast is tud exceptiont dobni. De ezt is el lehet kerülni. Ha referenciára castolsz, akkor dobhat, ha viszont pointerre, a null-t ad az exception helyett.

Magyarul majdnemhogy inkább C kódot írsz, mint C++ kódot? 

Azért nem... az stdlibet nem használom. Meg az exceptionokat. Viszont kb. minden mást igen. Ez még mindig nagyon messze van a C-től.

saját allokátor alatt mit értesz?

Az allocator osztályom egy interface, bármit mögé lehet tenni. Van olyan, ami csak simán a malloc()-ra egy wrapper. De van debug allocator, aminek van egy csomó feature: sentinelt rak a blokk elé és mögé, amit le tud ellenőrizni (buffer túlírásra). Nyilvántartja a foglalt blokkokat, a foglalás helyét teljes call stack-kel, így lehet memleak-et detektálni. De van olyan allokátorom is, ami gyakorlatilag teljesen kitudja váltani a malloc()-ot.

A designak az is része, hogy minden object, ami allokálni akar, annak be kell adni allokatort. Tehát a különböző objectek különböző allokatort tudnak használni. Így pl., szépen lehet látni, hogy melyik subsystem mennyi memóriát eszik. Külön memory poolból tudnak dolgozni. Ha gyanús, hogy valamelyik subsystem leak-el, akkor csak arra be tudom kapcsolni a memleak detectiont (mert akkor annak a subsystemnek debugos allocatort adok, a többinek meg "simát"), stb.