new datatype*[10] returns 如何指向指针?

How does new datatype*[10] returns a pointer to pointer?

我遇到了 C++ 中的 Hash Map 实现。 HashMap 的构造函数包含以下代码。 new HashEntry*[TABLE_SIZE] 行说的是什么。我以前从未见过这样的结构。它如何 return 指向指针的指针?

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

一个new表达式总是return一个指针。根据 [expr.new],数组的 new 表达式产生,强调我的:

When the allocated object is an array (that is, the noptr-new-declarator syntax is used or the new-type-id or type-id denotes an array type), the new-expression yields a pointer to the initial element (if any) of the array. [ Note: both new int and new int[10] have type int* and the type of new int[i][10] is int (*)[10] —end note ] The attribute-specifier-seq in a noptr-new-declarator appertains to the associated array type.

该行正在创建大小为 TABLE_SIZEHashEntry* 的新数组。该表达式的 return 类型是指向初始元素的指针,其类型为 HashEntry*。因此 HashEntry**.