Что говорит Стандарт 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 я бы руки ломал))