我有一个名为tire
的简单类。现在我想在创建车辆对象时动态分配车辆的轮胎数量。为此,我想创建一个tire
- 类对象数组,其大小等于轮胎数。要检查我的代码,我想打印tire
- 类数组中的对象数。
问题是:是否有一个函数可以检查我的tire
类数组中有多少个元素?我可以使用sizeof()
功能吗?
以下是代码:
#include <iostream>
// create a class for the tires:
class TireClass {
public:
float * profileDepths;
};
// create class for the vehicle
class vehicle {
public:
int numberOfTires;
TireClass * tires;
int allocateTires();
};
// method to allocate array of tire-objects
int vehicle::allocateTires() {
tires = new TireClass[numberOfTires];
return 0;
};
// main function
int main() {
vehicle audi;
audi.numberOfTires = 4;
audi.allocateTires();
// check if the correct number of tires has been allocated
printf("The car has %d tires.", sizeof(audi.tires));
// free space
delete [] audi.tires;
return 0;
};
答案 0 :(得分:3)
不,没有。考虑使用std::vector
。或者只是将轮胎数量存储在其他变量中(也许numberOfTires
足够好了吗?)。
答案 1 :(得分:1)
那么,运行代码会发生什么?如果您在32位或64位模式下编译,如果您有设施吗?
,它会改变吗?发生的事情是您要求编译器告诉您保存tires
变量所需的存储大小(以字节为单位)。此变量的类型为TyreClass*
,因此存储大小是数据指针所需的大小:这可能是任何东西,但今天它可能是32位系统的4个字节,或64位的8个字节系统
虽然可以使用sizeof
告诉您静态分配的数组的大小,但动态(堆)分配是不可能的。 sizeof
运算符(至少在C ++中)在编译时工作,而在程序运行时动态分配内存。
出于各种原因,更好的方法是使用std::vector<TyreClass>
来保持轮胎。然后,您可以轻松获得存储的轮胎数量,而不必担心自己分配或取消分配阵列。
(编辑:Gah,原谅我把轮胎/轮胎的英/美拼写混为一谈。现在已经很晚了,我已经被轮胎了。)