你如何删除c ++中的变量?

时间:2010-12-02 20:48:43

标签: c++ arrays

如何删除c ++程序中的变量?我有一个简单的int list[10];,我想删除它并将其更改为int list[9]。我会使用矢量,但我仍然想知道如何做到

6 个答案:

答案 0 :(得分:11)

如果你有这样的声明:

int list[10];

没有办法“删除”它。它可以是全局变量,具有静态分配的存储,也可以是存储在堆栈中的局部变量。

我不确切地知道你想要完成什么,但也许这样的事情会帮助你解决这个问题:

int *list = new int[10];  // allocate a new array of 10 ints
delete [] list;           // deallocate that array
list = new int[9];        // allocate new array with 9 ints

正如您在问题中所建议的那样,使用std::vectorstd::list等等而不是使用原始C风格的数组时,您几乎总是会更好。

答案 1 :(得分:5)

这不称为删除变量,而是重新定义变量的类型。这在C ++中是不可能的。一旦建立了变量类型,就无法更改。

有几种方法可以模拟或解决此问题......

  • 创建子范围并使用不同类型定义同名的新变量。
  • list切换到int*并在堆上分配它的内存。这样可以将其重新定义为不同的大小,而无需更改其类型。

答案 2 :(得分:2)

如果你的数组是在堆上分配的,那么:

int *L = new int[10];
delete[] L;
L = new int[9];

没有“删除”在堆栈上声明的局部变量的概念。

答案 3 :(得分:2)

要在C ++中删除数组,您需要使用delete[]运算符。请参阅this link

你要小心。你拥有的是一个静态数组。当您使用deletedelete[]时,它必须是动态分配的变量(使用new制作的变量)。要做到这一点:

int* list = new int[10];
//...Code...
delete[] list;
list = new int[9];

如果delete,请不要忘记new! (理想情况下,你应该使用管理的东西,所以你不能忘记,就像你说的那样)。

答案 4 :(得分:0)

int list[10];是静态的。声明为变量的数组是C ++中的静态对象,你不能删除/创建它们......这是一个编译时间。

您需要将数组显式声明为数组对象,比如说

int *list=new int[10];

虽然它仍然会声明一个声明,但它不是:新的操作数将触发mem分配代码)... 如果你想分配更多或更少的空间,你需要先释放它:

delete[] list;

然后使用新操作数创建一个新的(同一int类型)

答案 5 :(得分:-1)

当然,你总是可以这样做:

{
  int list[10];
  ... 'list' has 10 elements ...

  {
    int list[9];
    ... 'list' has 9 elements ... other 'list' inaccessible
  }
  ... 'list' 10 elements ... other 'list' non-existent.
}

无法想象你为什么会这样。