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++ и поэтому меняема.
Обязательная функциональности вернуть указатель, не равные null только в том случае, если хранилище можно выбрать, как требуется.Каждое такое распределение приводит указатель на хранилище раздельных из любого другого выбранного хранения.Порядок хранения и contiguity выбранные последовательными вызовами неспецифицированны.Значение хранится инициалом, который не указано.Возвращенные элементы указатель на начало (меньшему адрес выделенного байта).Если число равно нулю, то возвращаемое значение не сравнивает равно любому другому значению, возвращаемому функцией.
По умолчанию функциональности выполнения цикла.В цикле, функция сначала пытается выделить хранилище.Включает ли попытка вызова malloc(size_t) не определен.Если попытка выполнена успешно, то функция возвращает указатель к выбранному хранилище.В противном случае вызовы функций выделенный новый обработчик.Если вызываемая функция возвращает, то повторения цикла.Цикл завершается при попытке выбрать хранение или запрошенный успешно, если вызываемая функция не возвращает значения.
Обязательная функциональности нового обработчика для выполнения одной из следующих операций:
Сделайте больший объем хранения для распространения, а затем возвратить.
Вызывать либо ПРЕРВАТЬ или exit(int).
Создайте объект типа bad_alloc.
По умолчанию применяются расширения функциональности новый обработчик создать объект типа bad_alloc.Указатель null обозначает по умолчанию новый обработчик.
Порядок хранения и contiguity выбранные последовательными вызовами на operator new(size_t) неспецифицированны, как начальные значения, хранящиеся в ней.
Вторая функция называется выражением размещения новым, чтобы выбрать байты _Count хранения подходяще выравниванные, чтобы представлять любой объект того размера.Программа может задать другую функцию с помощью этой функции сигнатуры по умолчанию, которая заменит версия, заданная стандартной библиотекой C++ и поэтому меняема.
По умолчанию функциональности возвращать operator new(_Count), если эта функция выполняется успешно.В противном случае возвращается указатель null.
Третья функция называется выражением new размещения, t new формы (args).Здесь args состоят из одного указателя объекта.Это может быть полезно для построения объекта в известном адресу.Функция возвращает _Ptr.
К свободному хранилище выбранному operator new, вызов удаление оператора.
Дополнительные сведения о создание или 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 пространство имен: