2012-09-24 122 views
2

我有一個存儲16個浮點數組的類。我使用一個浮點指針將它們存儲爲一個數組,因此我必須在構造函數中用新運算符初始化數組。我的問題是,將16個浮點數組直接定義爲類的一部分是更有效率/更好的做法,還是應該繼續讓類通過指針存儲數據並在構造函數中調用new?構造一個包含指針的類

+3

使用'的std ::陣列'對於固定大小的數組和'std :: vector',否則(除非另一種類型更適合您的需要),或者如果您沒有C++ 11。如果每個實例都使用相同的值,請將其設置爲靜態。 – chris

+0

如果你總是需要浮點數組,那麼將數組作爲成員更合理。它更高效,代碼更清潔。當然,如果你想讓它們成爲「可選」,或者如果你需要一個大陣列,從堆中分配將會更合理 –

回答

1

當談到內存管理時,沒有普遍的「更好的做法」,所以你應該爲你的特定設計做正確的事情。

如果您始終正好分配16個浮點數,那麼在您的類中嵌入數組將會減少對動態分配器的調用次數。當對象存儲在自動存儲器中時,這可能會有所幫助,但有時可能會造成危害。例如,如果您在自動存儲中創建此類的大數組,則嵌入數組會增加堆棧溢出的可能性。

最好的方法是分析您的內存使用情況和您的時間,並查看分配這些陣列是否導致顯着的減速,或者對內存碎片作出重大貢獻。如果目前的方案不會給您帶來麻煩,那麼沒有理由替代它。

1

如果你知道你到底需要16漂浮,它不太可能這個數字會有所改變,那麼你應該這樣做:

struct MyClass 
{ 
    .... 
    float  myData[16]; 
}; 

沒有什麼錯用這個簡單的設計。如果數組的大小應該從一個案件的不同而不同,那麼最好是使用以下命令:

template <int _len_data> 
struct MyClass 
{ 
    .... 
    float  myData[_len_data]; 
}; 

之後,你可以定義變量,如:

MyClass<16> a1; 
MyClass<64> a2;