我有一个类成员作为VLA引用其他一些对象(即包含指向其他对象的指针)。在完成VLA内容后,我想清空它。 将其长度设置为零还是我需要在此之前将其各个元素设置为NULL,还是需要同时执行这两个操作?
答案 0 :(得分:1)
C ++没有使用缩写 VLA 表示的意义上的可变长度数组(如C99所示)。
因此,虽然您的代码中有关如何处理特定VLA的问题可能对某些特定的C ++ 语言扩展有意义,但它对标准C ++没有意义。
一些源代码,有关C ++语言扩展的信息,或者其他什么,简而言之,一些问题的具体描述,可能有助于提供更加面向问题的答案,而不仅仅是纠正一些误解。
合理的猜测是,使用std::vector
代替您正在使用的任何内容都可以获得良好的服务。
然而,您也可以合理地猜测,您的问题实际上是关于某些C ++语言扩展中的VLA,在这种情况下,使用std::vector
的建议很可能是不合适的。
没有信息可以决定好的建议。
答案 1 :(得分:1)
注意:VLA是C99标准的一部分,即使gcc允许它们,它们也不是C ++的一部分。
话虽这么说,一旦创建了一个数组,你就无法清除它。数组的空间(无论是常规数组还是VLA)保留到块的末尾(在函数中)或直到程序结束(在命名空间级别)。
如果您希望使用可调整大小的数组,则应使用动态数组:事实证明标准库为此用途提供了std::vector
。< / p>
答案 2 :(得分:0)
使用std::vector
,然后执行my_vector.clear();
。