Programování zdar.
Řeším tu jednu nekonzistenci okolo přetěžování new a delete. Chtěl bych si ujistit, že jsem to pochopil dobře, a že mi nic neuniklo.
Mohu si u vlastní třídy přetížit operator new s placementem
void *operator new(size_t sz, void *a, char *c,...)
Pokud chci objekt té třídy dealokovat nějakým specifickým způsobem, musím tam mít něco takového
void operator delete(void *ptr, size_t sz)
To je výborný, protože hodnotu sz nemusím nikam ukládat. Jenže je zde ještě jedna specifická a povinná funkce
void operator delete(void *ptr, void *a, char *c,...)
která se volá v případě, že konstruktor hodí výjimku. Zkoušel jsem tam narvat size_t sz, a vypadá to, že to sebralo jen GCCčko, ale moc si s tím nejsem jist, protože jsem to netestoval. Rozhodně mi u toho MSVC hodí warning, protože nedokáže spárovat placement new s ...
void operator delete(void *ptr, size_t sz, void *a, char *c,...)
Chápu to tedy dobře tak, že si velikost alokované paměti stále musím ukládat někam vedle? A že se jedná o nekonzistenci v normě, nebo jen v MSVC?