Re: C++17: new с выравниванием - как удалять по феншую?
От: watchmaker  
Дата: 25.12.18 19:54
Оценка: 16 (1) +1
Здравствуйте, Mr.Delphist, Вы писали:

MD>или надо как-то по особому удалять выровненный указатель?

Считай, что это отдельное семейство парных функций, подобно уже существующим malloc/free, new/delete и new[]/delete[]. Так если ты выделил память через new[], а освободил через free, то это ошибка в программе и её работоспособность не гарантируется.


MD>Кто сталкивался? Народ в гуглении говорит надо как-то выпендрануто через operator new и operator delete всё делать, но сомнения гложут.

Компилятор сам способен выбрать нужные методы создания и освобождения памяти, если это описать в типе и не мешать.
Например:
struct alignas(1024) S {};

auto* p = new S; // вызовет new с выравниванием
delete p; // вызовет delete с выравниванием


Ты же в своём коде явно указываешь другую функцию выделения памяти, а не ту, которую хочет выбрать компилятор, а потом ещё и теряешь эту информацию. Собственно, если хочется дальше вручную тут этим управлять, то нужно также самому вручную доставить до delete и аргумент align_val_t, который был передан в new при выделении.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.