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


operator new (<new>)

Функция вызвана с помощью выражения New для выделения хранилища для отдельных объектов.

void* operator new( 
   std::size_t _Count 
) throw(bad_alloc); 
void* operator new( 
   std::size_t _Count,         
   const std::nothrow_t& 
) throw( ); 
void* operator new( 
   std::size_t _Count,  
   void* _Ptr 
) throw( );

Параметры

  • _Count
    Число байтов хранилища, которое нужно выделить.

  • _Ptr
    Указатель, который необходимо вернуть.

Возвращаемое значение

Указатель на наименьший байтовый адрес вновь выделенного хранилища. Или _Ptr.

Заметки

Первая функция вызывается новое выражение для выделения байтов _Count хранилища подходяще выравниванные для представления любой объект указанного размера. Программа может указать другую функцию с данной сигнатурой функции, которая заменяет версию по умолчанию является стандартной библиотеки C++ C и поэтому меняема.

Необходимое расширение функциональности возвращать nonnull указатель, только если хранилище можно выбрать в запросе. Каждое такое выделение приводит указатель на хранилище делит из любого другого выбранного хранилища. Порядок и смежность хранилища выбранные последующими вызовами неспецифицированны. Значения хранятся инициалом, неспецифицированно. Возвращает указатель указывает на начало байтов (более низкому) адрес выбранного хранилища. Если число равно нулю, то не сравнивает возвращенное значение равно любому другому значению, возвращаемому функцией.

Реакция на событие по умолчанию для выполнения цикла. В цикле, функция сначала пытается выделить запрошенный хранилище. Включает ли попытка вызов malloc(size_t) не указано. Если попытка успешна, функция возвращает указатель на выбранный хранилище. В противном случае функция значение новый обработчик. Если вызываемая функция возвращает, цикл повторит. Цикл заканчивается при попытке выбора запрошенный хранилище успешно или если вызываемая функция не возвращает значение.

Необходимое расширение функциональности нового обработчика выполнить одну из следующих операций:

  • Создайте дополнительное хранилище доступным для выделения и затем возврата.

  • Вызовите abort или exit(int).

  • Создать объект типа bad_alloc.

Реакция на событие по умолчанию новый обработчик создания объекта типа bad_alloc. Указатель по умолчанию задается новым обработчиком.

Порядок и смежность хранилища выбранные последующими вызовами operator new(size_t) неспецифицированны, как начальные значения, хранящимися.

Вторая функция вызывается выражением размещения новым для выделения байтов _Count хранилища подходяще выравниванные для представления любой объект указанного размера. Программа может указать другую функцию с данной сигнатурой функции, которая заменяет версию по умолчанию является стандартной библиотеки C++ C и поэтому меняема.

Реакция на событие по умолчанию возвращать operator new(_Count), если эта функция завершилась успешно. В противном случае он возвращает указатель.

Третья функция вызывается выражением новый размещения, формы аргументовновый (T). В данном случае аргументы состоят из одного указателя объекта. Это может быть полезно для построения объект в известном адресу. Функция возвращает _Ptr.

К свободному хранилище выбранному operator new, вызов оператор delete.

Сведения о функцию или nonthrowing расширения функциональности новой см. в разделе Новая и операторы Delete.

Пример

// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>

using namespace std;

class MyClass 
{
public: 
   MyClass( )
   {
      cout << "Construction MyClass." << this << endl;
   };

   ~MyClass( )
   {
      imember = 0; cout << "Destructing MyClass." << this << endl;
   };
   int imember;
};

int main( ) 
{
   // The first form of new delete
   MyClass* fPtr = new MyClass;
   delete fPtr;

   // The second form of new delete
   MyClass* fPtr2 = new( nothrow ) MyClass;
   delete fPtr2;

   // The third form of new delete
   char x[sizeof( MyClass )];
   MyClass* fPtr3 = new( &x[0] ) MyClass;
   fPtr3 -> ~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
}

Результат

Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.0023FC60
Destructing MyClass.0023FC60
The address of x[0] is : 0023FC60

Требования

Заголовок:<new>

Пространство имен: std

См. также

Ссылки

Оператор new (примеры STL)

Структура nothrow_t

operator delete (<new>)