我花了一些时间来弄清楚如何创建我创建的数据结构的数组。我最终认为它必须是一个指针,但为什么呢?
struct Food{
int weight;
double price;
string name;
};
Food *foods = new Food[5]; // Why a pointer?
答案 0 :(得分:4)
因为new[]
分配了一块内存,并为该内存提供了一个指针。在new Food[5]
的情况下,将有五个Food
类型的对象的空间,每个对象都是默认构造的。你得到的指针是五个中的第一个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
答案 1 :(得分:0)
您不一定需要它作为指针,您可以轻松创建全局/本地数组:
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的自动指针也知道堆上的数组。