清除或清空VLA

时间:2012-11-23 07:02:45

标签: c++ class null

我有一个类成员作为VLA引用其他一些对象(即包含指向其他对象的指针)。在完成VLA内容后,我想清空它。 将其长度设置为零还是我需要在此之前将其各个元素设置为NULL,还是需要同时执行这两个操作?

3 个答案:

答案 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();