我花了一段時間才弄清楚如何創建一個我創建的數據結構的數組。我最終認爲它必須是一個指針,但爲什麼?C++結構數組 - 爲什麼它必須是一個指針?
struct Food{
int weight;
double price;
string name;
};
Food *foods = new Food[5]; // Why a pointer?
我花了一段時間才弄清楚如何創建一個我創建的數據結構的數組。我最終認爲它必須是一個指針,但爲什麼?C++結構數組 - 爲什麼它必須是一個指針?
struct Food{
int weight;
double price;
string name;
};
Food *foods = new Food[5]; // Why a pointer?
由於new[]
分配的內存塊,並給你一個指針到內存中。在new Food[5]
的情況下,將有空間用於Food
類型的五個對象,每個對象都被構造。你得到的指針是五個對象中的第一個。
您還可以使用
Food foods[5];
創建一個數組。
然而,在C++來創建「陣列」的優選方式是使用任一std::array
或者如果你需要一個動態陣列(或需要它是在堆上)std::vector
:
std::array<Food, 5> foods; // Create a static fixed-size array of 5 Food objects
std::vector<Food> foods(5); // Create a dynamic, expandable array of 5 Food object
你再也Ť一定需要它是一個指針,則可以很容易地創建一個全局/本地陣列:
Food foods[5];
當在堆,陣列可以是可變參數長度:
Food *foods = new Food[std::rand() + 1];
但是你要刪除它們爲數組明確:
delete[] foods; // otherwise they leak
大部分是有意義的使用STL的容器中的時間:
#include <vector>
#include <array>
std::vector<Food> foods(5, cheezeburger()); // in case we need more cheeseburgers
std::array<Food, 5> foods; // in case five cheeseburgers should be enough for everyone
他們會爲你做一切惱人的內存管理。
STL的自動指針也知道堆上的數組。
你可以提到std :: array或爲什麼要使用std :: vector over new [] –