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