Olyan nincs, hogy "csak úgy" dob a nyelv valami exceptiont. Pontosan specifikálva van, hogy mi dobhat exceptiont. OoM esetén maga a new operator dobja, ami szintén specifikálva van.
Nem úgy értettem, hogy "csak úgy", hanem úgy, hogy kivételt kellett dobnia.
Itt az elvekről beszéltünk, hogy mondjuk a C gyorsabb, mint a C++. És akkor itt volt ez az ellenpélda, hogy nem feltétlenül.
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."
Bocsi, nem akartam félrevezető lenni.
Mindegy, így már tiszta, köszi, hogy kibeszéltük.
Azért nem egészen. A C++ standard library nem sűrűn dobál exceptiont, inkább ott is visszatérési értékekkel operálnak, vagy éppen speckó state-be teszik az objectet hiba után (pl. streamek). De persze azért dobál exceptionokat is, de nem ez a jellemző. Maga a core language meg talán nem dob soha exceptiont, kivétel a new, de ebből ugye van nothrow-s verzió.
Akkor itt volt az én fejemben a kavarodás; nem a nyelvnek az overheadjei ezek, hanem a hozzá kapcsolt stdlib-nek...
Saját magam pedig úgy kezelem a helyzetet, hogy nem használom a standard library-t egyáltalán, hanem mindenre saját megoldásom van, ami mindent hibakóddal kezel le (vagy éppen assert-tel, ha programozó hibáról van szó). Igaziból saját allokátorom is van, szóval a new-t se használom. Egyetlen egy helyen van leírva a kódban az, hogy new (egy placement new, hogy meghívja az ctort, szóval ez se az allokálás miatt van).
Magyarul majdnemhogy inkább C kódot írsz, mint C++ kódot? :) (A saját allokátor alatt mit értesz? Egy malloc()
-ra épülő refcounteres wrappert, vagy szó szerint egy malloc()
replacementet?)