Размещение нового должно использоваться только с правильно совмещенными указателями на достаточную емкость хранилища
Размещение нового должно использоваться только с правильно совмещенными указателями на достаточную емкость хранилища.
The new оператор выделяет необходимый объем памяти для хранения объекта на куче и создает новый объект в выделенной памяти за одну операцию. Если вы хотите разделить выделение и конструкцию и поместить объект в предварительно выделенную память или в стек, или в кучу, вы используете размещение new. Размещение new имеет преимущества перед new в определенных ситуациях, например, когда необходимо поместить объект в известное место памяти.
The new оператор автоматически выделяет правильный объем выровненной памяти, необходимый объекту. Но при использовании new размещениянеобходимо вручную убедиться, что переданный указатель имеет достаточную выделенную емкость памяти и правильно выровнен. Нарушение этих ограничений приводит к конструкции объекта в несогласованном местоположении или инициализации памяти за пределами выделенных границ, что может привести к неожиданному или зависящему от реализации поведению.
Предположим, что указатель ptr предварительно выделено m байты памяти в стеке и имеет n выравнивания. Для образца, если ptr массив:
uint8_t ptr[5];
sizeof(uint8_t) * 5 и выравнивание alignof(uint8_t). Если вы выделяете больше m байты на этот указатель в new размещения выражение или если выравнивание, необходимое для выделения, больше nШашка вызывает нарушение. При определении выравнивания указателя на шашку учитываются явные выравнивания, такие как с std::align.Средство проверки не рассматривает указатели, которые являются предварительно выделенной памятью на куче, поскольку доступное хранилище зависит от доступности памяти, которая известна только во время выполнения.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
| Группа: Библиотека языковой поддержки |
| Категория: Необходимый, Автоматизированный |