繁体   English   中英

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

[英]How to init dynamic array of pointers to nullptr c++

我有一个代码:

var *item[8] = { nullptr };

而且效果很好。 但我需要动态地做到这一点。 这是我尝试过的:

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

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

//对不起我的英语不好

item 中的() 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 function:

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 风格的 arrays。 您通常会得到更少容易出错的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM