C++中的隐式静态变量

Implicit static variable in C++?

本文关键字:静态 变量 C++      更新时间:2023-10-16

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

int *rows[25];

构造函数初始化行变量,如下所示:

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 的整数数组数组,对吧?

在我的司机班上,

我声明了两个 SeatSelect 对象,它们都具有不同的参数:

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

premium应该有 5 排,每排 10 个座位 = 50 个座位。

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

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

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

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

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

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