Отсутствует ошибка профиля обеспечения при создании приложения ios ionic с использованием xcode 10

Размещение new позволяет вам создать объект в уже выделенной памяти.

Возможно, вы захотите сделать это для оптимизации (это быстрее не перераспределять все время), но вам нужно повторно -конструировать объект несколько раз. Если вам нужно перераспределять ресурсы, было бы более эффективно выделять больше, чем вам нужно, даже если вы еще не хотите его использовать.

Devex дает хороший пример :

Стандартный C ++ также поддерживает оператор размещения new, который строит объект в предварительно выделенном буфере. Это полезно при создании пула памяти, сборщика мусора или просто в том случае, когда безопасность производительности и исключений является первостепенной (нет опасности сбоя распределения, поскольку память уже выделена, а построение объекта в предварительно выделенном буфере занимает меньше времени) :

char *buf  = new char[sizeof(string)]; // pre-allocated buffer
string *p = new (buf) string("hi");    // placement new
string *q = new string("hi");          // ordinary heap allocation

Вы также можете быть уверены, что в определенной части критического кода может отсутствовать отказ в распределении (возможно, вы работаете на кардиостимуляторе, например). В этом случае вы захотите использовать новое место размещения.

Освобождение места размещения new

Вы не должны освобождать все объекты, которые используют буфер памяти. Вместо этого вы должны удалить [] только исходный буфер. Затем вам придется вручную вызвать деструкторов ваших классов вручную. Для хорошего предложения по этому вопросу см. FAQ по Stroustrup: Есть ли «удаление места размещения» ?

14
задан Yuval 19 September 2018 в 19:55
поделиться