Wstępne przydzielanie pamięci dla klas może być korzystne ze względu na wydajność. Przydzielenie pamięci może się odbyć na przykład podczas uruchomienia programu lub przed istotną z punktu widzenia wydajności częścią kodu.
Wstępne przydzielenie pamięci odbywa się w dwóch etapach: (1) przydzielenie pamięci o odpowiednim rozmiarze oraz (2) przeciążenie operatora new w celu użycia przydzielonej pamięci. W podanym kodzie źródłowym widać, że klasa DemoNew przeciąża operator new i wyłącza go. Jest tam też wersja operatora new, która korzysta ze wstępnie przydzielonej pamięci i zwraca wskaźnik do niej. Kompilator wygeneruje kod, który będzie automatycznie wywoływał konstruktor na tej pamięci. Funkcja Test-PrzydzPamNew przydziela najpierw pamięć, po czym przekazuje tę pamięć do operatora new klasy DemoNew:
pdemonew = new (pv) DemoNew;
Zauważmy, że operacja delete zdaje się nic nie robić, a jednak zmusza kompilator do wygenerowania wywołania destruktora.
Jest to rozbudowana technika, która może sprowadzić na nas kłopoty, jeśli nie wiemy dokładnie, co robimy. Lepiej napisać program, który działa, niż sprytny i szybki kod, który nie działa.
unikanie banalnych błędów
void TestNakładania(long &la, long &lb)
la = 10;
Ib = 20;
Po
void TestNakładania(long &la, long &lb)