![](/img/trans.png)
[英]Array of Pointers to an Abstract Class: to nullptr or not to 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.