我的代码中有这样定义的 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/