其中最可能的原因Data* arr = new Data[len];
是行不通的,因爲類型Data
沒有默認構造函數,即Data::Data()
。
但無論Data
是否有默認的構造函數,不管怎麼說,嘗試創建一個這樣的數組並不是一個好主意。一旦你用new[]
動態分配它,你承諾自己照顧醜陋的內存管理連接它。使用其中一個STL容器(如std::vector
(#include <vector>
必需))將爲您處理內存管理更好。
這時你有幾種選擇:
std::vector<Data> v; // option 1
v.reserve(len);
// in loop:
v.push_back(Data(x, y)); // there could be different values
std::vector<Data> v2(len); // option 2
std::vector<Data> v3(len, Data(12,12)); // option 3
第一種選擇將適合幾乎任何情況。它準備的內存塊大到足以容納len
元素,然後您可以方便但仍然非常有效的方式填寫v
。選項2要求Data
具有默認構造函數,該選項由使用自定義構造函數構造元素的選項3解決。
所有提到的選項都會導致std::vector
對象創建自動存儲持續時間。請注意,所有元素都存儲在一個連續的內存塊中,因此您可以使用&v[0]
來初始化指向其第一個元素的指針,並以與您使用動態分配數組相同的方式使用它。
它如何「不起作用」? – juanchopanza 2013-02-18 00:47:01
我懷疑你的類沒有默認的構造函數?哦,至於散列圖,如果你可以使用C++ 11,可以使用std :: unordered_map。 – Corbin 2013-02-18 00:47:19
有沒有理由不能使用STL? – Aesthete 2013-02-18 00:47:46