C ++:类中具有自定义大小的数组

时间:2010-12-21 03:26:32

标签: c++ arrays class opengl

我想这样做:

class Graphic
{
    int *array;
    Graphic( int size )
    {
        int temp_array[size];
        array = temp_array;
        glGenTextures( size, array );
    }
}

这会有用吗?即使它会,还有更好的方法吗?

感谢。

2 个答案:

答案 0 :(得分:8)

使用new表示您必须记住delete []它;使用编译器相关的可变大小数组意味着您失去了可移植性。

使用矢量会好得多。

#include <vector>

class Graphic
{
    std::vector<int> array;
    Graphic( int size )
    {
        array.resize(size);
        glGenTextures( size, &array[0] );
    }
}

语言保证向量元素在内存中是连续的,因此在这里&array[0]是安全的。

答案 1 :(得分:1)

不,temp_array的内存是在堆栈上分配的。当函数结束时,那个内存被释放,你剩下的就是一个悬空指针。如果要保持数组有效超出构造函数返回的点,则使用new动态分配它。例如:

array = new int[size]

然后记得删除它。通常这是在析构函数中完成的,如下所示:

delete[] array