c++ - 在类中初始化可变大小的数组

标签 c++ arrays class arduino initialization

我正在尝试根据构造函数的输入参数初始化一个大小为 n 的数组。 这有效:

//Inside Header
class runningAverage{
    private:
        byte n;
        float array[10];
    public:
        runningAverage(byte);
};

//Inside .cpp
runningAverage::runningAverage(byte a){
    n = a;
    for (byte i = 0; i<n; i++) {
        array[i] = 0;
    }
}

这行不通:

//Inside Header
class runningAverage{
    private:
        byte n;
        float array[];
    public:
        runningAverage(byte);
};

//Inside .cpp
runningAverage::runningAverage(byte a){
    n = a;
    for (byte i = 0; i<n; i++) {
        array[i] = 0;
    }
}

我想初始化数组,使其成为 n 指定的大小。这样我就不会通过任意指定 float array[256] 或类似的东西来浪费内存。感谢您的帮助!

最佳答案

你必须实际分配数组;并且你会想要使用指针类型,float array[] 不是你想的那样。正如 juanchopanza 提醒我们的那样,您还需要禁用复制构造函数和赋值运算符,或者实现执行适当深度复制的那些。

//Inside Header
class runningAverage{
    private:
        byte n;
        float *array; // <= correct type
    public:
        runningAverage(byte);
        ~runningAverage(); // <= you'll need a destructor to cleanup
    private:
        runningAverage(const runningAverage &);
        runningAverage & operator = (const runningAverage &);
};

//Inside .cpp
runningAverage::runningAverage(byte a){
    array = new float[n]; // <= allocate array
    n = a;
    for (byte i = 0; i<n; i++) {
        array[i] = 0;
    }
}

// clean up
runningAverage::~runningAverage(){
    delete[] array;
}

但是,如果您有一些动态的自动容器供您使用(例如 std::vector),您可能想改用它 - 那么您就不必处理复制/赋值/析构函数/内存管理。

关于c++ - 在类中初始化可变大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25153153/

相关文章:

c++:具有标记类型访问权限的元组

arrays - 在 Julia 中旋转非位数组

c++ - 为什么 C++ 中长度为 n 的字符字符串在 [n] 索引上总是有一个空字符作为垃圾?

c++ - 检测到 glibc,但我没有使用动态内存?

c++ - 用于constexpr函数中的constexpr

swift - 在 Swift 中,创建对象时在便利初始值设定项中出现语法错误

Java如何启动游戏回合类来存储回合数据

python - 在另一个函数中用作参数时,如何将自定义 Python 对象表示为字符串?

c++ - 如何将二进制数据复制到字符串流

php - 如何获得两个数组的关键交集?