c++ - 在 C++ 中初始化结构数组

标签 c++ arrays struct

我的代码中有这样定义的 struct Node:

struct Node {
Node() : prev(0), left(0), right(0) {}
Node* prev;
Node* left;
Node* right;
char val;
};

我像这样初始化节点结构对象数组:

Node** pool = new Node*[10000000];

我以为它会使用默认构造函数创建 Node 结构对象,但实际上数组似乎是空的。有什么有效的方法可以立即创建“空”对象数组吗?

最佳答案

你应该使用 std::vector<> ;几乎没有理由使用 new在 C++ 中。

 auto pool = std::vector<Node>(10000000);

(您的原始代码正在创建 Node* s,而不是 Node s。)


如果出于某种原因你不想使用 vector , 你可以使用 std::unique_ptr<> .该代码将是

std::unique_ptr<Node[]> pool(new Node[10000000]);

但你真的应该使用vector .


此外,您还可以简化和改进Node :

struct Node final {
Node* prev = nullptr;
Node* left = nullptr;
Node* right = nullptr;
char val = '\0';

Node(const Node&) = delete;
Node& operator(const Node&) = delete;
};

关于c++ - 在 C++ 中初始化结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662496/

相关文章:

c++ - 段错误 - 从指针到指针的 printf 值

c - 在 C 中对结构数组使用基数排序/计数排序?

在 C 中更改结构的地址

c++ - 有没有编译前不提示保存的C/C++ IDE?

c++ - 如何跟踪 GCC 的并行性 TS 的进度

c++ - 对具有指针的结构 vector 进行排序

java - 无法使用 execl() 启动 jar

javascript - 对链接数组进行排序

c++ - 初始化大型 std::arrays 时编译器挂起

ios - 如何在 Swift 中从 NSmutableArray 的索引之一(lat lng 坐标)对 NSmutableArray 进行排序