2017-05-28 65 views

回答

4

由于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 
+0

你可以提到std :: array或为什么要使用std :: vector over new [] –

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

相关问题