C++中的隐式静态变量
Implicit static variable in C++?
我有一个对象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[] 内存后,常规对象会覆盖它。
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量