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


operator new[] (<new>)

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

void *operator new[]( 
   std::size_t _Count 
) 
   throw(std::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.

Заметки

Первая функция вызывается выражением new[] для выделения байтов _Count хранилища подходяще выравниванные для представления любой объект массива, или небольшой размер. Программа может определить функцию с данной сигнатурой функции, которая заменяет версию по умолчанию является стандартной библиотеки C++. Необходимое расширение функциональности такие же, как у оператор new(size_t). Реакция на событие по умолчанию возвращать operator new(_Count).

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

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

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

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

Пример

// new_op_alloc.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[2];
   delete[ ] fPtr;

   // The second form of new delete
   char x[2 * sizeof( MyClass ) + sizeof(int)];
   
   MyClass* fPtr2 = new( &x[0] ) MyClass[2];
   fPtr2[1].~MyClass();
   fPtr2[0].~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;

   // The third form of new delete
   MyClass* fPtr3 = new( nothrow ) MyClass[2];
   delete[ ] fPtr3;
}

Пример результатов выполнения

Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Construction MyClass.0012FED4
Construction MyClass.0012FED8
Destructing MyClass.0012FED8
Destructing MyClass.0012FED4
The address of x[0] is : 0012FED0
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC

Требования

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

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

См. также

Ссылки

Структура nothrow_t

operator delete[] (<new>)