在C++中创建对象时括号前的星号是什么意思?

Jam*_*701 1 c++ asterisk indirection

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

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

具有我不理解的语法的行是:

table = new HashEntry*[TABLE_SIZE];
Run Code Online (Sandbox Code Playgroud)

在括号之前加上星号是什么意思?

Joh*_*nck 5

new HashEntry*[TABLE_SIZE]分配和构造一个TABLE_SIZE元素数组,其中每个元素都是a HashEntry*,即指向a的指针HashEntry.

更现代的C++版本是:

private:
  std::vector<std::unique_ptr<HashEntry>> table;
public:
  HashMap() : table(TABLE_SIZE) {}
Run Code Online (Sandbox Code Playgroud)

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