簡體   English   中英

動態分配的類數組中有多少個元素

[英]how many elements in dynamically allocated class array

我有一門簡單的課,叫做tire 現在,我想在創建車輛對象時動態分配車輛的輪胎數量。 為此,我想創建一個tire類對象數組,其大小等於輪胎數量。 為了檢查我的代碼,我想在tire -class數組中打印對象的數量。

問題是:是否有一個函數可以檢查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;
};

不,沒有。 考慮使用std::vector 或者只是將輪胎計數存儲在其他變量中(也許numberOfTires足夠好了嗎?)。

好吧,運行代碼時會發生什么? 如果您擁有32位或64位模式的編譯功能,是否可以更改?

發生的是,您正在要求編譯器告訴您保存tires變量所需的存儲大小(以字節為單位)。 此變量的類型為TyreClass* ,因此存儲大小是數據指針所需的大小:可以是任何東西,但是今天對於32位系統它可能是4個字節,對於64位系統則是8個字節。

雖然可以使用sizeof來告訴您靜態分配的數組的大小,但無法進行動態 (堆)分配。 sizeof運算符(至少在C ++中)在編譯時起作用,而動態分配內存是在程序運行時完成的。

出於各種原因,更好的方法是使用std::vector<TyreClass>來保持輪胎。 然后,您可以輕松獲取存儲的輪胎數量,而不必擔心自己分配或取消分配數組。

(編輯:Gah,請原諒我將英語/美國的輪胎/輪胎拼寫混淆了。已經晚了,我輪胎了。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM