operátor nové funkce
Pokud se vyskytne prohlášení, například v programu, převádí volání funkce operator new:
Poznámky
char *pch = new char[BUFFER_SIZE];
Pokud je požadavek pro nula bajtů úložiště, nový operátor vrací ukazatel na odlišné objekt (opakuje, volání na nový operátor vrátit jiné ukazatele).Pokud není dostatek paměti pro přidělení požadavek nový operátor vrátí NULL nebo výjimku (viz nové a odstranit operátory Další informace).
Můžete psát rutiny, která se pokusí uvolnit paměť a akci opakujte přidělení; Viz _set_new_handler Další informace.Další informace o obnovení systému naleznete v tématu Zpracování není dostatek paměti podmínky.
Dvou oborů pro operator new funkce jsou popsány v následující tabulce.
Obor pro operátor nové funkce
Operátor |
Oblast působnosti |
---|---|
:: nový operátor |
Globální |
název třídy:: nový operátor |
Třída |
První argument nový operátor musí být typu size_t (typ definované v STDDEF.H) a návratový typ je vždy void *.
Globální nový operátor funkce je volána, když nové operátor se používá k rozdělení objektů předdefinované typy, uživatelem definovaný typ třídy objektů, které neobsahují nový operátor funkcí a polí libovolného typu.Při nové operátor se používá k rozdělení objektů typu třídy kde nový operátor je definován této třídy nový operátor se nazývá.
Nový operátor definovaných pro třídu je statická členské funkce, (který, proto nelze virtuální), která skryje globální funkce nový operátor funkce pro objekty typu třída.Předpokládejme, že pokud nové slouží k přidělení a nastavte hodnotu dané paměti:
// 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;
}
V závorkách, aby zadaný argument nové je předán do Blanks::operator new jako chInit argument.Však globální nový operátor je skrytá funkce způsobuje kód například následující chybovou zprávu:
Blanks *SomeBlanks = new Blanks;
Typy nonclass 5.0 a starší, Visual C++ a matic (bez ohledu na to, zda byly z třídy typu) pomocí nové operátor vždy použít globální nový operátor funkce.
Počínaje Visual C++ 5.0, kompilátor podporuje pole členské nové a Odstranit operátory v deklaraci třídy.Příklad:
// 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;
}