静态数组分配问题!

时间:2010-02-26 21:50:44

标签: c++ arrays memory-management

我想静态分配数组。看下面的代码,这段代码不正确,但它会让你知道我想做什么

class array
{
  const int arraysize;
  int array[arraysize];//i want to statically allocate the array as we can do it by non type parameters of templates
public:
  array();
};

array::array():arraysize(10)
{
  for(int i=0;i<10;i++)
    array[i]=i;
}

main()
{
  array object;
}

5 个答案:

答案 0 :(得分:2)

必须使用模板参数完成,否则sizeof(array)对每个对象都不同。

这是使用模板参数的方法。

template <int N>
class array
{
   int data[N];

   // ...
};

或者,如果您不介意动态分配,则可以使用std::vector

答案 1 :(得分:2)

如果您的数组大小始终相同,请将其设为静态成员。作为整数类型的静态成员可以直接在类定义中初始化,如下所示:

class array
{
  static const int arraysize = 10;
  int array[arraysize];

  public:
    array();
};

这应该按照你想要的方式工作。如果对于类型数组的每个对象,arraysize并不总是相同,那么您不能这样做,并且您将需要使用模板参数,动态分配数组或使用STL容器类(例如std::vector)。

答案 2 :(得分:0)

C ++不允许使用可变长度数组(即大小不是编译时常量的数组)。在结构中允许一个将使得无法计算sizeof(数组),因为大小可能因实例而异。

如果只在运行时知道大小,请考虑使用std :: vector。这也避免了将数组大小存储在单独的变量中。请注意,从堆分配(例如通过std :: vector)也允许更大的数组,因为可用的堆栈空间非常有限。

如果您希望它是编译时常量,请使用模板参数。那么你应该寻找已经实现它的Boost.Array。

答案 3 :(得分:0)

数组大小必须是编译时常量。您几乎就在那里,您只需要初始化const并将其设为static。或者,使用动态数组或向量。

答案 4 :(得分:0)

编辑:请注意这个答案:这很可能是针对您的情况做错的方法。但是如果你 真的 需要它是一个数组(不是矢量或其他),你 真的 需要它要动态分配,请执行以下操作:

class array
{
  int *p_array;

  public:
    array(int size);
};

array::array(int size)
{
p_array = malloc(size * sizeof(int));
}

请确保清理(在descructor中使用IE免费的p_array)

相关问题