MD>Но с удалением какая-то беда есть — MinGW крашится на "Unknown signal". Вопрос: это сам компилер кривой пока что, или надо как-то по особому удалять выровненный указатель? Кто сталкивался? Народ в гуглении говорит надо как-то выпендрануто через operator new и operator delete всё делать, но сомнения гложут.
Ну ответ уже дали, но по сути это достаточно очевидно, что нужна парная функция. Как работает alignment new в принципе? Он выделяет блок большего размера, и возвращает адрес внутри этого блока, соответствующим образом выровненный. Как мы помним, функции удаления памяти нужна дополнительная информация о выделенном блоке. Традиционно эта информация хранится в специальном объекте, расположенном непосредственно перед выделенным блоком. В случае выравненного выделения памяти, указатель возвращенный в вызывающий код, указывает не на начало блока, а где-то внутри него. Соответственно, удаляющая функция доожна найти начало блока, используя информацию о выравнивании.