Как создать структуру с массивом переменных? - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть следующая структура

struct Foo {
    uint32_t magic;
    uint32_t length;
    uint8_t data[];
}

Длина дает число байтов в данных.

Как мне выделить это, используя new, чтобы гарантировать ограничения выравнивания?Боюсь, что new uint8_t[length+8] может выравниваться только для uint8_t.

Еще одна проблема: указатель может содержать Foo *, Bar *, Bla *, Blub *, ... все с магией в качестве первого члена,Большинство из них имеют статический размер и будут выделены с new Bla().И я хочу избежать необходимости

switch(p->magic) {
    case MAGIC_FOO: delete[](p); break;
    case MAGIC_BAR: delete(p); break;
    case MAGIC_BLA: delete(p); break;
    case MAGIC_BLUB: delete[](p); break;
    ...
    default:
        std::cerr << "Don't know how to free a " << p->magic << std:endl;
        assert(false);
}

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

...