c++ - 根据常量整数字段设置数组字段的长度

标签 c++ arrays static-memory-allocation

假设我有一个类...

class Foo
{
public:
  Foo(int size);

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

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

我通常会在这里使用 std::vector,但我正在为 Arduino 编写一个库,所以它不会运行,并且我会尽可能避免外部依赖。

最佳答案

你在这里运气不好,因为 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
    }
};

关于c++ - 根据常量整数字段设置数组字段的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35005721/

相关文章:

php - 通知: Array to string conversion when with two arrays

c++ - 为什么对堆栈中的内存使用自定义动态内存分配?

c++ - 测量静态、堆和堆栈内存? (c++, Linux - Centos 7)

c++ - JsonCpp 在退出函数时抛出 LogicError

c++ - 使用 map::find 查找键并返回值

c++ - 相等字符串(数组的字符串和字符串)-c++

javascript - 解析 jquery .map() 类似数组

javascript - 在javascript中,如何将字符串数组转换为对象数组?

c++ - 异步 http 客户端库和 glib 事件循环

c++ - 为什么概念上的存储分配与实际不同?