W jaki sposób nowe roboty budowlane
Wyrażenie alokacji — zawierające wyrażenia Nowy operatora — realizuje trzy funkcje:
Lokalizuje i rezerw magazynu dla obiektu lub obiektów, które mają zostać przydzielone.Po zakończeniu tego etapu poprawne ilość pamięci jest przydzielona, ale nie jest jeszcze obiektu.
Inicjuje wszystkich obiektów.Po zakończeniu inicjalizacji wystarczającą ilość informacji jest wyświetlana dla przydzielonego magazynu, który ma być obiektem.
Zwraca wskaźnik do obiektów typu wskaźnik pochodzące z nową nazwę typu lub Nazwa typu.Program używa tego wskaźnika, dostęp do nowo zaalokowanego obiektu.
Nowy operator wywołuje funkcję operator new.Dla tablic jakiegokolwiek typu i dla obiektów, które nie są klasy, struct, lub Unii typów, funkcja globalna :: operator new, jest nazywany przydzielić składowania.Typem klasy obiektów można zdefiniować własne operator new funkcji członka statycznego na podstawie na klasy.
Gdy napotka kompilator Nowy operator przydzielić obiektu typu type, emituje wywołanie do type**:: operator new (sizeof (type))** lub, jeżeli nie zdefiniowane przez użytkownika operator new jest zdefiniowany, :: operator new (sizeof (type)). W związku z tym Nowy operatora można przydzielić właściwa ilość pamięci dla obiektu.
[!UWAGA]
Argument dla operator new jest typu int.Ten typ jest zdefiniowany w BEZPOŚREDNIM.H, MALLOC.H, PAMIĘCI.H, WYSZUKIWANIA.H, STDDEF.H, STDIO.H, STDLIB.H, CIĄG.H i czasu.H.
Opcja w gramatyki pozwala specyfikacja Położenie (patrz gramatyki dla operatora new).Położenie parametru można tylko dla implementacji zdefiniowane przez użytkownika operator new; zezwala na dodatkowe informacje, które mają być przekazywane do operator new.Wyrażenie z Położenie pola, takie jak T *TObject = new ( 0x0040 ) T; jest tłumaczona na T *TObject = T::operator new( sizeof( T ), 0x0040 ); Jeśli klasy t ma operator Członkowskie nowych, w przeciwnym razie T *TObject = ::operator new( sizeof( T ), 0x0040 );.
Oryginalny zamiar Położenie pole było umożliwienie obiekty zależne od sprzętu do przydzielenia na określone przez użytkownika adresy.
[!UWAGA]
Mimo, że w poprzednim przykładzie pokazano tylko jeden argument w Położenie pola, nie ma ograniczeń na ile dodatkowe argumenty mogą być przekazywane do operator new w ten sposób.
Nawet w przypadku, gdy operator new została zdefiniowana dla typu klasy, można używać operatora globalnego przy użyciu formularza w tym przykładzie:
T *TObject =::new TObject;
Operator zakresu rozdzielczość (::) wymusza stosowanie globalnym nowych operatora.