0

我有一个对象 SeatSelection。在这个对象中,我声明了一个整数数组的数组,如下所示

int *rows[25];

我的 SeatSelection 构造函数初始化 rows 变量,如下所示:

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指针/数组。我没有将此变量声明为静态的。为什么会这样?

4

2 回答 2

1

要为每个类实例获取一个单独的rows变量,将变量设置为“not”是不够的static

您必须使其成为类成员才能为其提供每个实例的存储。

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

于 2013-10-18T21:52:26.493 回答
0

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

于 2013-10-18T21:53:17.197 回答