Что означает звездочка перед скобками при создании объекта в C++?

Я читал пример реализации хеш-таблицы на 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];

Что значит иметь звездочку перед такими скобками?


person James4701    schedule 05.02.2015    source источник
comment
ну, это означает, что это массив HashEntry* размера TABLE_SIZE   -  person Marson Mao    schedule 05.02.2015
comment
вы можете прочитать это для некоторой справки stackoverflow.com/questions/16001803/   -  person Marson Mao    schedule 05.02.2015


Ответы (2)


new HashEntry*[TABLE_SIZE] выделяет и создает массив из TABLE_SIZE элементов, где каждый элемент представляет собой HashEntry*, то есть указатель на HashEntry.

Более современная версия C++:

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

Это позволяет избежать необходимости определять свой собственный деструктор и, как правило, безопаснее.

person John Zwinck    schedule 05.02.2015
comment
И автоматически устанавливает все в нем на NULL, как я полагаю? - person James4701; 05.02.2015
comment
@ James4701: unique_ptr (и вообще другие умные указатели) по умолчанию имеет значение null, да. Это противоречит необработанным указателям C, которые по умолчанию не инициализированы. - person John Zwinck; 05.02.2015