Нет, по стандартным правилам это невозможно. Массивы переменной длины и гибкие члены массива, такие как вы показываете в своем примере, вообще не разрешены в C ++. Также нет эквивалента или альтернативы.
Кроме того, malloc
вообще не может использоваться для создания объектов в C ++. Только new
с указанным ему правильным типом может динамически создавать объект этого типа. Все остальное недопустимо и вызывает неопределенное поведение, если вы притворяетесь, что объект данного типа был создан.
Начиная с C ++ 20, существуют некоторые исключения из правила выше для определенных типов объектов, которые могут быть созданы неявно, но тем не менее, размер объекта во время компиляции фиксирован по типу и не может изменяться вообще.
Перераспределение для объекта никогда не приводит к тому, что дополнительное хранилище становится частью объекта и никто не может получить к нему доступ, как если бы он был.