根据const整数字段设置数组字段的长度

时间:2016-01-26 01:43:57

标签: c++ arrays static-memory-allocation

假设我有一个班级......

class Foo
{
public:
  Foo(int size);

private:
  const int size;
  int data[];
};

假设在实例化时立即设置了size字段,如何根据该大小输入设置data的长度?

我通常会在这里使用std::vector,但我正在为Arduino编写一个库,因此我不会飞,而且如果可以的话,我会尝试避免外部依赖。

1 个答案:

答案 0 :(得分:6)

这里运气不好,因为C ++必须在编译时知道数组的大小(换句话说,size必须是常量表达式)。您可以选择使用动态分配

int* data;  

然后在构造函数初始化列表中使用new int[size];进行分配,或者更好的是,使用std::unique_ptr<>(C ++ 11或更高版本),这是一个围绕原始指针的光包装并删除其分配的内存在范围退出时,您不必手动delete[]

class Foo
{
private:
    std::unique_ptr<int[]> data; // no need to manually delete
public:
    Foo(int size): data{new int[size]} {}
};

第三个选项是使Foo成为非类型模板类(假设您知道编译时的大小,这似乎正在发生,至少从您的问题判断)

template<std::size_t size>
class Foo
{
    int data[size];
public:
    Foo() 
    {
        // constructor here
    }
};