Operator new generuje bardzo dużo kodu. Jak widać w pokazanym fragmencie kodu maszynowego, najpierw wywołuje się operator new, a następnie konstruktor. Przy każdym wywołaniu operatora new powstaje tyle właśnie dodatkowego kodu.
We współczesnych procesorach większym obciążeniem jest rozwlekły kod niż dodatkowe wywołania funkcji, ponieważ dłuższy kod może wymagać wykorzystania pomocniczej pamięci podręcznej. (Lub gorzej, może zmuszać procesor do pobierania kodu niebędącego w pamięci podręcznej.) Wymiana zawartości pamięci podręcznej zabiera więcej czasu, niż dodatkowe wywołanie funkcji.
We fragmencie „Po” utworzyliśmy funkcję składową wykonującą operację new. Zamiast wywoływać samą operację new, wywołujemy tę funkcję. W efekcie otrzymujemy znacznie mniej generowanego kodu, a wydajność powinna wzrosnąć.
Przykład: klasa RefCounted w pliku access.cpp
unikanie awarii; unikanie strat pamięci
Przed
void *operator new(t_rozm cbPrzydziel)
return malloc(cbPrzydziel);
Po
void ^operator new(t_rozm cbPrzydziel)
return malloc(cbPrzydziel);
void operator delete(void * pv)
free(pv);
Do zwalniania pamięci trzeba używać tego samego menedżera pamięci, co do jej przydzielania. W przeciwnym wypadku nastąpi awaria wówczas, gdy inny dezalokator spróbuje zwolnić pamięć, o której nic nie wie. Na przykład jeśli do przydzielania pamięci używamy menedżera stosu Windows, to do jej zwolnienia trzeba użyć operacji HeapFree, a nie domyślnej operacji dełete.
Przykład: klasa Refcounted w pliku access.cpp