C++ 结构数组 - 为什么它必须是指针

C++ Struct Array - Why does it have to be a pointer?

本文关键字:指针 为什么 结构 数组 C++      更新时间:2023-10-16

我花了一段时间才弄清楚如何制作我创建的数据结构数组。我最终认为它必须是一个指针,但为什么呢?

struct Food{
int weight;
double price;
string name;
};
Food *foods = new Food[5]; // Why a pointer?

因为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

你不一定需要它是一个指针,你可以很容易地创建一个全局/本地数组:

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 的自动指针也知道堆上的数组。