2013-10-18 49 views
0

我有一个对象SeatSelection。在此对象中,我声明整数数组的一个数组如下C++中的隐式静态变量?

int *rows[25]; 

我SeatSelection构造函数初始化变量的行如下:

SeatSelection::SeatSelection(int start, int range){ 
    this->range = range; 
    this->start = start; 

    for(int i = 0; i < range; i++){ 
    rows[i] = new int[10]; 

    for(int j = 0; j < 10; j++) 
    rows[i][j] = (j+1); 
    } 
} 

在理论上,我现在应该对整数数组的数组大小10对吗?

在我的驱动程序类,

我声明了两个SeatSelection对象,都具有不同参数:

SeatSelection premium(1,5); 
SeatSelection regular(6, 15); 

premium应该有5行的10个席位= 50个席位。

regular应该有15行,每个10个座位= 150个座位。

通过一些调试,我发现这两个不同的SeatSelection对象共享相同的rows指针/数组。我没有声明这个变量是静态的。这是为什么发生?

+6

你认为'std :: vector'吗? –

+5

调试输出和SSCCE或它没有发生。 –

+0

这是为了我们不允许使用'std :: vector'的任务。我们的阵列必须“手工完成”。 –

回答

1

要为每个类实例获取单独的rows变量,仅使变量“不是static”是不够的。

您必须让它成为类实例才能为每个实例提供存储。

其他非静态变量的存储时间由其范围决定。非静态名称空间成员(包括全局名称空间)变量对整个程序都有一个副本。一个非静态局部变量每次调用该函数都有一个副本。

+0

+1:真是让人失望。 :) –

+0

@John:同意。这个你的水晶球工作得很好。 –

0

看起来像int *行[25]不是SeatSelection类的一部分。您可以在本地/全局声明row []数组,并且每个SeatSelection对象使用相同的空间。高级对象写入行[]内存后,普通对象将覆盖它。