[英]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.