在类C ++中定义一个int数组

时间:2016-02-09 00:27:09

标签: c++ arrays class

有没有办法动态地(我认为这是正确的术语)在类中定义一个int数组,其大小是同一个类中的私有成员变量?例如:

class Scene()
{
    //public member functions

    private:

        int max;
        int xcoords[max];
 }

我在这里搜索了其他已回答的问题,但我还没有学会如何在课堂上使用向量,这是大多数回复所暗示的。理想情况下,在我的类的构造函数中,我将传递一个int max,然后我用它初始化xcoord数组,使其大小为max,条目全为-1。

2 个答案:

答案 0 :(得分:3)

如果要为成员数据进行动态调整,几乎肯定必须将其存储在堆中。这意味着,像这样

class Foo{
  int* data;
public:
  Foo(int size){
    data = new int[size];
  }
  ~Foo(){
    // remember to clean up
    delete[] data;
  }
}

这样,构造函数将在创建类时在堆内存中为size int分配大小,并在删除时将其释放。

编写构造函数的官方c++方式越多:

  Foo(int size):
    data(new int[size])
  {
  }

但最终它会做同样的事情。

答案 1 :(得分:1)

考虑将内存管理留给标准库。 而不是数组,使用向量。

#include <vector>
#include <iostream>

using std::vector;
using std::cout;
using std::endl;

class Scene
{
public:
    vector<int> verticeData;
};

int LEGACY_FUNCTION(const int * data, int count)
{
    for (int i = 0; i < count; ++i)
    {
        cout << " ";
        cout << data[i];
        cout << " ";

    }
    cout << endl;
    return 0;
}

int main()
{
    Scene myscene;
    myscene.verticeData.emplace_back(3);
    myscene.verticeData.emplace_back(4);
    myscene.verticeData.emplace_back(5);

    LEGACY_FUNCTION(myscene.verticeData.data(), myscene.verticeData.size());

    myscene.verticeData.clear();
    myscene.verticeData.emplace_back(1);
    myscene.verticeData.emplace_back(7);

    LEGACY_FUNCTION(myscene.verticeData.data(), myscene.verticeData.size());

    return 0;
}