new expression
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
Инициализация объектов в динамической памяти получили.
Оригинал:
Initializes objects in dynamically obtained memory.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Используется там, где данные должны быть выделены динамически, то есть, не зная его размер до сборник.
Оригинал:
Used where data need to be allocated dynamically, that is, without knowing its size prior the compilation.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править] Синтаксис
::(необязательно)
|
new
|
type | [array_n](необязательно)
|
(init_params)(необязательно)
|
(1) | ||||
::(необязательно)
|
new
|
(type )
|
[array_n](необязательно)
|
(init_params)(необязательно)
|
(2) | ||||
::(необязательно)
|
new
|
(placement_params)
|
type | [array_n](необязательно)
|
(init_params)(необязательно)
|
(3) | |||
::(необязательно)
|
new
|
(placement_params)
|
(type )
|
[array_n](необязательно)
|
(init_params)(необязательно)
|
(4) | |||
Все версии возвращают объект типа' 'типа *.
Оригинал:
All versions return an object of type type *.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Объяснение
new выражение выделяет область памяти, либо инициализирует один объект или массив объектов там, и возвращает указатель на первый построенный объект. Так как это не иначе можно назвать явного вызова конструктора, выражение это единственный способ построить объект динамически.Оригинал:
The
new expression allocates a memory area, initializes either single object, or an array of objects there and returns a pointer to the first constructed object. Since it is not otherwise possible to call explicitly call a constructor, the expression is the only way to construct an object dynamically.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Первые две и последние две версии выражения отличаются только синтаксически. Поведение такое же.
Оригинал:
The first two and last two versions of the expression differ only syntactically. The behavior is the same.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
| Этот раздел не завершён Причина: Explanation about how types are specified is missing |
[править] Выделение памяти
Память выделяется по Распределение функций, либо operator new или operator new[].
Оригинал:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
В последних двух версиях выражение называется' 'размещению новых и используется для передачи дополнительных параметров (placement_params) к распределению функций.
Оригинал:
The last two versions of the expression are called placement new and are used to pass additional parameters (placement_params) to the allocation function.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если array_n отсутствует, память выделяется для одного объекта, ссылаясь на operator new распределения функций. В противном случае память для массива из array_n объекты выделяются по телефону operator new[] распределения функций. Отметим, что более чем
size_of( type ) * array_n могут быть выделены из-за дополнительных информации, закодированной компилятором (например, размер массива, так как эта информация необходима для того, чтобы уничтожить объекты в массиве правильно).Оригинал:
If array_n is absent, memory is allocated for a single object by invoking operator new allocation function. Otherwise memory for an array of array_n objects is allocated by calling operator new[] allocation function. Note, that more than
size_of( type ) * array_n might be allocated because of additional information encoded by the compiler (such as the size of the array, since this information is needed in order to destruct the objects in the array properly).Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Название распределение функцией, во-первых посмотрел в местной класса типа масштабы и только если поиск неудачен, глобальное пространство имен посмотрел вверх. Если
:: присутствует в new выражения, только глобальное пространство имен посмотрел вверх. Прототип функции должно выглядеть следующим образом для того, чтобы распределение функций должны быть выбраны Оригинал:
The allocation function's name is firstly looked up in the local class type scope and only if the lookup fails, the global namespace is looked up. If
:: is present in the new expression, only the global namespace is looked up. The prototype of the function should look like the following in order to the allocation function to be selected: Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
| void* operator new (size_t count); |
for versions 1, 2, array_n is not present | |
| void* operator new[](size_t count); |
for versions 1, 2, array_n is present | |
| void* operator new (size_t count/*, placement_params...*/); |
for versions 3, 4 (placement new), array_n is not present | |
| void* operator new[](size_t count/*, placement_params...*/); |
for versions 3, 4 (placement new), array_n is present | |
count это количество байт для распределения, placement_params являются параметры, приведенные на размещение новое выражение.Оригинал:
count is number of bytes to allocate, placement_params are the parameters given to the placement new expression.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] По умолчанию реализации и перегрузки
Некоторые функции распределения по умолчанию неявно объявленный в каждой единице трансляции. Кроме того, неявные реализаций, предоставляемых компилятором по умолчанию, если программа явно реализовали их. Эти функции следующим образом (см. это для получения дополнительной информации)
Оригинал:
Several default allocation functions are implicitly declared in each translation unit. Also, implicit implementations are provided by the compiler by default, unless the program has explicitly implemented them. These functions are as follows (see это for more information):
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
| void* operator new (size_t); |
(1) | |
| void* operator new[](size_t); |
(2) | |
| void* operator new (size_t, std::nothrow_t); |
(3) | |
| void* operator new[](size_t, std::nothrow_t); |
(4) | |
| void* operator new (size_t, void* ptr); |
(5) | |
| void* operator new[](size_t, void* ptr); |
(6) | |
выделяет необходимое число байтов или бросает std::bad_alloc на провал
3-4) Оригинал:
allocates requested number of bytes or throws std::bad_alloc on failure
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
выделяет запрошенное количество байт или возвращает NULL на провал
5-6) Оригинал:
allocates requested number of bytes or returns NULL on failure
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
возвращается
ptr. Это позволяет построить объект в пользователем область памяти. Программа не должна определить явные реализации этих функций.Оригинал:
returns
ptr. This allows to construct an object in user-supplied memory area. The program must not define explicit implementations for these functions.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Инициализация объекта
Если array_n отсутствует, один объект инициализируется в приобретенной области памяти, передавая init_params в качестве параметров конструктора или вызова конструктора по умолчанию, если их нет.
Оригинал:
If array_n is absent, single object is initialized in the acquired memory area, passing init_params as parameters to the constructor or invoking default constructor if they are not present.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если array_n присутствует, массив array_n объекты инициализируются, проходя init_params в качестве параметров в конструктор каждого объекта или вызова конструктора по умолчанию, если init_params нет.
Оригинал:
If array_n is present, an array of array_n objects is initialized, passing init_params as parameters to the constructor of each object or invoking default constructor if init_params are not present.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

