我想这样做:
class Graphic
{
int *array;
Graphic( int size )
{
int temp_array[size];
array = temp_array;
glGenTextures( size, array );
}
}
这会有用吗?即使它会,还有更好的方法吗?
感谢。
答案 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