Что говорит Стандарт C++ про гибкие массивы?

Подскажите, пожалуйста, допустимо ли использование гибких массивов в C++?

Например:

struct Object
{
    uint64_t ID;
    size_t Size;
    uint8_t Data[];
};

Ответы (1 шт):

Автор решения: Arenoros

Если отвечать кратко, нет.

Так как в С выделение памяти под объект полностью лежит на разработчике и соответственно размещение объекта в ней тоже. В C++ создать объект с гибким массивом просто через new не выйдет. Но ни чего не мешает сделать это в C стиле.

struct Object {
    uint64_t ID;
    size_t Size;
    Type *Data; // с небольшим отличием
    static Object* newObj(size_t count){
         Object *s = (Object *)malloc(sizeof(Object) + count*sizeof(Type)));
         s.Size = count;
         s.Data = s + sizeof(Object);
         return s;
     }
     // ну и не забыть про free()
};

Но конечно этот хак очень быстро сломается при наследовании и виртуальных функциях, да и в принципе за такой код, где либо кроме just for fun я бы руки ломал))

→ Ссылка