Operátory new
a delete
lze přetěžovat jako funkci (globální operátor) a nebo statickou metodu. V případě přetížení globálního operátoru bude tento volán při každém vytváření nové instance libovolného typu až do konce pběhu programu. Je-li přetypován globální operátor a zároveň zároveň je přetíženm i operátor pro některou třídu (přetížen jako statická metoda), bude pro tuto třídu vždy volán její statický operátor.
#include<iostream> using namespace std; class trida { private: int a; public: trida(){} void *operator new (size_t s=1); void operator delete(void* p); ~trida(){} }; void *operator new (size_t s=1) { cout << "globalni new" << endl; void *p=malloc(s); return p; } void * trida::operator new (size_t s) { cout << "lokalni new" << endl; void *p=malloc(s); return p; } void operator delete(void *p) { cout << "globalni delete" << endl; free (p); } int main(void) { int *p=new int(5); delete(p); trida *t=new trida(); delete(t); return 0; }