有没有办法动态地(我认为这是正确的术语)在类中定义一个int数组,其大小是同一个类中的私有成员变量?例如:
class Scene()
{
//public member functions
private:
int max;
int xcoords[max];
}
我在这里搜索了其他已回答的问题,但我还没有学会如何在课堂上使用向量,这是大多数回复所暗示的。理想情况下,在我的类的构造函数中,我将传递一个int max,然后我用它初始化xcoord数组,使其大小为max,条目全为-1。
答案 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;
}