Создание объекта включает: a) получение памяти (в стеке или куче, operator new
обрабатывает последний); б) его инициализация (вызов конструктора). Вероятно, уничтожение.
Если мы хотим пропустить a) в создании, то есть для создания объекта в памяти, которую мы уже получили, мы используем размещение new
.
Если мы хотим уничтожить объект без освобождения памяти, мы вызываем деструктор явно.
НО, конструктор и деструктор - это пара функций, а new
и delete
- это пара операторов.
Итак, почему не используется пара размещения new
и "размещение delete
" (вы можете себе представить) или пара явных вызовов конструктора и деструктора? И какова цель этого несоответствия?