如何初始化指向nullptr c++的指针的动态数组

How to init dynamic array of pointers to nullptr c++

本文关键字:指针 动态 数组 c++ nullptr 初始化      更新时间:2024-03-29

我有一个代码:

var *item[8] = { nullptr };

而且效果很好。但我需要动态地做这件事。这就是我尝试的:

int n = 8;
var **item;
item = new var*[n]();
item = { nullptr };

但这不起作用。区别在哪里?我该怎么办?

//对不起我的英语

item = new var*[n]();中的()将为您初始化指向nullptr的所有指针,因此之后不需要手动执行此操作。

int n = 8;
var **item;
item = new var*[n](); // <-- all are nullptr here

实时演示

也就是说,你真的应该直接使用std::vector而不是new[]

int n = 8;
std::vector<var*> item;
item.resize(n);

或者简单地说:

int n = 8;
std::vector<var*> item(n);

实时演示

无论哪种方式都应该初始化指向nullptr的指针。但如果你想明确这一点,你可以这样做:

int n = 8;
std::vector<var*> item;
item.resize(n, nullptr);
int n = 8;
std::vector<var*> item(n, nullptr);

实时演示

如果你有一个数组、向量或容器,并且你想用一些值来填充它,那么你可以使用std::fill函数:

std::fill(item,item+n,nullptr);

然而,如果您想在初始化时分配nullptr,那就容易多了:您使用零初始化,就可以了。只需注意零和默认初始化之间的区别:

item = new var*[n]{};     //zero initialized (all elements would have nullptr as value)
item = new var*[n];       //default initialized (elements might not have nullptr as value)
item = new var*[n]();     //default initialized until C++03
//zero initialized after C++03

无论如何,我建议您迁移到std::vector,而不是C风格的数组。您最终得到的代码通常不太容易出错。