Поделиться через


функция оператора new

При обнаружении следующий оператор в программе, она преобразует в вызов функции operator new.

Заметки

char *pch = new char[BUFFER_SIZE];

Если запрос для нулевых байтов хранилища, оператор new возвращает указатель к заданному объекту (то есть вызовы к повторным оператор new возвращает разные указатели).Если недостаточно памяти для запроса выделения, оператор new возвращает Значение NULL или создает исключение (см. Новые и удаление операторов дополнительные сведения).

Можно написать программу, которая пытается освободить память и повторить распределение; см. _set_new_handler для получения дополнительных сведений.Дополнительные сведения о схеме восстановления см. в разделе " Недостаточно памяти для обработки условий.

2 Области operator new функции, описанные в следующей таблице.

Область для оператора новых функций

Оператор

Область

:: оператор new

Global

имя класса:: оператор new

Класс

Первый аргумент оператор new иметь тип size_t (тип, определенный в STDDEF.H) и тип возвращаемого значения всегда void *.

Global оператор new когда вызывается функция создать оператор используется для выбора объектов встроенных типов объектов типа класса, не содержащих определяемые пользователем оператор new функции и массивы любого типа.После создать оператор используется для выбора объектов типа класса где оператор new указывает тип оператор new вызывает.

оператор new функция, задаваемая для класса функция статического члена (которая не может, поэтому быть виртуальной), hide global оператор new функция для объектов этого типа класса.Рассмотрим случай, когда создать используется для выбора и установить память на заданное значение.

// 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;
}

Аргумент, указанный в скобках, создать передает в Blanks::operator new как chInit аргумент.Однако global оператор new функция скрыта, что следующий Код создания ошибки:

Blanks *SomeBlanks = new Blanks;

В Visual C++ 5,0 и типах ранних версиях nonclass и всех массивов (независимо от того, были ли они класс тип) выбранный использование создать оператор всегда использовал global оператор new функция.

Начиная с Visual C++ 5,0, компилятор поддерживает массив элементов создать и удалить операторы в объявлении класса.Примеры.

// 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;
}

См. также

Ссылки

функция удаления оператора

оператор new (C++)

оператор delete (C++)