【问题标题】:How to set array of pointers all to nullptrs in constructor?如何在构造函数中将指针数组全部设置为 nullptrs?
【发布时间】:2021-10-23 11:46:27
【问题描述】:
class TrieNode {
public:
    TrieNode() : next{new TrieNode *[26]} {}
    TrieNode **next;
    string word;
};

我必须为此应用程序使用原始指针,我想知道如何在构造函数中将所有 26 个指针设置为 nullptr?我是否必须遍历next 并单独设置每个,还是有另一种更快的方法?

【问题讨论】:

  • 这里不需要动态分配数组。 TrieNode *next[26] 很好。 std::array<TrieNode*, 26> 更好。

标签: c++ arrays pointers constructor initialization


【解决方案1】:

你可以执行value-initialization

  1. 如果 T 是数组类型,则数组的每个元素都是值初始化的;
  2. 否则,对象为zero-initialized

零初始化的效果是:

  • 如果 T 是标量类型,则对象的初始值是显式转换为 T 的整数常量零。
class TrieNode {
public:
    TrieNode() : next{new TrieNode *[26]()} {}
//                                      ^^  or use {} since C++11
    TrieNode **next;
    string word;
};

作为效果,数组的所有元素都将被初始化为空指针。

【讨论】:

  • 我已经使用 C++ 几年了,但从未听说过值初始化。这是一个众所周知/常用的功能吗?
  • 糟糕,我的意思是,我一直在使用它,但我从来不知道它会使所有指针都为 nullptr。
  • @user5965026 是的,这是一个重要功能,即new TrieNode *[26]new TrieNode *[26]() 之间的区别。
  • @user5965026 c++ 功能丰富,当编译器版本更新时,总是要花时间查找新功能。并跟上数据。例如。如果你多年来一直在使用 c++,为什么还要使用这样的原始数组而不是 std::vector/std::array。可以帮助跟上的是观看来自 ccpcon 的视频,例如 Jason Turner 的精彩视频,它概述了 c++ 的演变。 youtube.com/watch?v=iz5Qx18H6lg&t=686s
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多