Учитывая реализацию распределения и процедуры освобождения, скажем
Код: Выделить всё
template
T * allocate_aligned(int alignment, int length)
{
// omitted: check minimum alignment, check error
T * raw = 0;
// using posix_memalign as an example, could be made platform dependent...
int error = posix_memalign((void **)&raw, alignment, sizeof(T)*length);
return raw;
}
template
struct DeleteAligned
{
void operator()(T * data) const
{
free(data);
}
};
Код: Выделить всё
std::unique_ptr data(allocate_aligned(alignment, length));
Код: Выделить всё
template
using aligned_unique_ptr = std::unique_ptr;
Код: Выделить всё
aligned_unique_ptr data(allocate_aligned(alignment, length));
Кроме этого, вы видите в этом что-то плохое? Есть ли альтернатива, менее подверженная ошибкам, но полностью прозрачная для пользователя после того, как распределение было выполнено?
Подробнее здесь: https://stackoverflow.com/questions/294 ... rt-pointer