【问题标题】:What does asterisk before brackets on object creation mean in C++?C++ 中对象创建括号前的星号是什么意思?
【发布时间】:2015-04-04 21:42:20
【问题描述】:

我正在从网站上阅读 C++ 中的哈希表实现示例并看到了这个。

private:
  HashEntry **table;
public:
  HashMap() {
        table = new HashEntry*[TABLE_SIZE];
        for (int i = 0; i < TABLE_SIZE; i++)
              table[i] = NULL;
  }

语法我看不懂的行是:

table = new HashEntry*[TABLE_SIZE];

这样的括号前面有星号是什么意思?

【问题讨论】:

标签: c++ asterisk indirection


【解决方案1】:

new HashEntry*[TABLE_SIZE] 分配并构造一个由TABLE_SIZE 元素组成的数组,其中每个元素都是一个HashEntry*,即指向HashEntry 的指针。

更现代的 C++ 版本是:

private:
  std::vector<std::unique_ptr<HashEntry>> table;
public:
  HashMap() : table(TABLE_SIZE) {}

这避免了必须定义自己的析构函数,并且通常更安全。

【讨论】:

  • 并自动将其中的所有内容设置为 NULL 我假设?
  • @James4701:unique_ptr(通常还有其他智能指针)默认为“null”,是的。这与默认未初始化的原始 C 指针相反。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 2016-12-15
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2010-10-09
  • 2018-11-21
  • 1970-01-01
相关资源
最近更新 更多