动态分配的类数组中有多少个元素

时间:2013-10-24 08:00:16

标签: c++ arrays class dynamic allocation

我有一个名为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;
};

2 个答案:

答案 0 :(得分:3)

不,没有。考虑使用std::vector。或者只是将轮胎数量存储在其他变量中(也许numberOfTires足够好了吗?)。

答案 1 :(得分:1)

那么,运行代码会发生什么?如果您在32位或64位模式下编译,如果您有设施吗?

,它会改变吗?

发生的事情是您要求编译器告诉您保存tires变量所需的存储大小(以字节为单位)。此变量的类型为TyreClass*,因此存储大小是数据指针所需的大小:这可能是任何东西,但今天它可能是32位系统的4个字节,或64位的8个字节系统

虽然可以使用sizeof告诉您静态分配的数组的大小,但动态(堆)分配是不可能的。 sizeof运算符(至少在C ++中)在编译时工作,而在程序运行时动态分配内存。

出于各种原因,更好的方法是使用std::vector<TyreClass>来保持轮胎。然后,您可以轻松获得存储的轮胎数量,而不必担心自己分配或取消分配阵列。

(编辑:Gah,原谅我把轮胎/轮胎的英/美拼写混为一谈。现在已经很晚了,我已经被轮胎了。)