operator nowych funkcji.
Po napotkaniu instrukcji, tak jak w następującym w programie, tłumaczy on na wywołanie funkcji operator new:
Uwagi
char *pch = new char[BUFFER_SIZE];
Jeśli żądanie jest zero bajtów pamięci masowej, operator new zwraca wskaźnik do obiektu odrębne (to znaczy powtórzone wywołania operator new różne wskaźniki zwrotu).Jeśli nie ma za mało pamięci dla żądania alokacji operator new zwraca NULL lub zgłasza wyjątek (zobacz nowych i usunąć Operatorzy Aby uzyskać więcej informacji).
Można napisać rutynowych, prób w celu zwolnienia pamięci i ponów próbę wykonania przydziału; zobacz _set_new_handler Aby uzyskać więcej informacji.Uzyskać więcej szczegółów na temat odzyskiwania systemu, zobacz następujący temat Warunki obsługi za mało pamięci.
Dwa zakresy dla operator new funkcje są opisane w poniższej tabeli.
Zakres dla operatora nowe funkcje
Operator |
Zakres |
---|---|
:: operator new |
Globalne |
Nazwa klasy:: operator new |
Klasa |
Pierwszy argument operator new musi być typu int (typ zdefiniowany w STDDEF.H) i typ zwracany jest zawsze void *.
Globalny operator new funkcja jest wywoływana, gdy Nowy operator jest używana do alokowania obiektów wbudowanych typów, typem klasy obiektów, które nie zawierają zdefiniowane przez użytkownika operator new funkcje i tablice dowolnego typu.Gdy nowych operator jest używana do alokowania obiektów typu klasy gdzie operator new jest zdefiniowany tej klasy operator new nosi nazwę.
Operator new funkcję zdefiniowaną dla klasy jest funkcji członka statycznego (które nie mogą w związku z tym, być wirtualnego), która ukrywa globalnym operator new funkcji dla obiektów tej klasy.Należy wziąć pod uwagę w przypadku gdy Nowy jest używana do przydzielania i ustawić pamięć do danej wartości:
// spec1_the_operator_new_function1.cpp
#include <malloc.h>
#include <memory.h>
class Blanks
{
public:
Blanks(){}
void *operator new( size_t stAllocateBlock, char chInit );
};
void *Blanks::operator new( size_t stAllocateBlock, char chInit )
{
void *pvTemp = malloc( stAllocateBlock );
if( pvTemp != 0 )
memset( pvTemp, chInit, stAllocateBlock );
return pvTemp;
}
// For discrete objects of type Blanks, the global operator new function
// is hidden. Therefore, the following code allocates an object of type
// Blanks and initializes it to 0xa5
int main()
{
Blanks *a5 = new(0xa5) Blanks;
return a5 != 0;
}
Argument dostarczonych w nawiasach i w Nowy jest przekazywana do Blanks::operator new jako chInit argument.Jednakże globalnym operator new funkcja jest ukryty, powodując następujących czynności, aby wygenerować błąd kodu:
Blanks *SomeBlanks = new Blanks;
Typy nonclass 5.0 lub starszej, Visual C++ i wszystkie tablice (niezależnie od tego, czy zostały one z klasy typu) alokowany przy użyciu nowych zawsze używać operatora globalny operator new funkcji.
Począwszy od programu Visual C++ 5.0, kompilator obsługuje tablicy Członkowskie Nowy i usunąć operatorów w deklaracji klasy.Na przykład:
// spec1_the_operator_new_function2.cpp
class MyClass
{
public:
void * operator new[] (size_t)
{
return 0;
}
void operator delete[] (void*)
{
}
};
int main()
{
MyClass *pMyClass = new MyClass[5];
delete [] pMyClass;
}