Очистить или очистить VLA

У меня есть член класса как VLA, ссылающийся на некоторые другие объекты (т.е. содержит указатели на другие объекты). Я хотел бы очистить его после того, как я закончу с содержимым VLA.
Достаточно ли установить его длину на ноль или мне нужно установить отдельные элементы на NULL до этого или мне нужно сделать оба варианта?

-1

Решение

Примечание: VLA являются частью стандарта C99, они НЕ являются частью C ++, даже если gcc позволяет им там.

При этом, как только массив создан, вы не можете очистить это. Пространство для массива (будь то обычный массив или VLA) резервируется до конца блока (в функции) или до конца программы (на уровне пространства имен).

Если вы хотите изменяемый массивы, вы должны использовать динамический массив: просто получается, что стандартная библиотека обеспечивает std::vector для этого использования.

1

Другие решения

C ++ не имеет массивов переменной длины в том смысле, который указан при использовании аббревиатуры VLA (как в C99).

Таким образом, хотя ваш вопрос о том, что делать с конкретным VLA в вашем коде, может иметь значение для какого-то конкретного C ++ расширение языка, это не имеет значения для стандартного C ++.

Некоторый исходный код, информация о расширении языка C ++ или что-то еще, короче говоря, некоторые конкретное описание проблемы, возможно, помог бы дать более проблемный ответ, а не просто исправить некоторые недоразумения.


Это разумное предположение, что вы бы хорошо обслужили, используя std::vector вместо того, что вы используете.

Тем не менее, это также разумное предположение, что ваш вопрос действительно о VLA в некотором расширении языка C ++, и в этом случае совет использовать std::vector вполне может быть плохим.

Там нет информации, чтобы выбрать хороший совет.

1

использование std::vector, тогда делай my_vector.clear();.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector