память — инициализация C ++ без New или Malloc / Calloc / etc

Итак, код, как показано ниже. Я реализовал очень простой HashMap, класс HashEntry также определяется просто.

Теперь я не обладаю достаточным опытом работы с C ++, но, скажем, new, delete и malloc / free / realloc / и т.д. — все это приводит к сбою моей системы и необходимости адаптации кода. Я действительно не уверен, как обращаться с конструктором и деконструктором без этих инструментов.

Я знаю некоторые вещи, например, строку, которую я могу инициализировать так: string program(sizeVariable), но я не вижу, как это сделать с этой строкой table = new HashEntry*[TABLE_SIZE]; А затем также потерял, чтобы справиться с потерей удаления в деконструкции.

Любые ответы или советы приветствуются, и простите за форматирование, которое не выглядит таким уж уродливым в моей IDE.

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

}

-1

Решение

new, delete и malloc / free / realloc / etc all

Вы почти никогда не должны использовать ни один из них в C ++. Ручное управление памятью практически невозможно для повседневной разработки на C ++. Есть много лучших альтернатив:

  • Умные указатели, такие как unique_ptr а также shared_ptr,

  • Контейнеры, такие как std::vector или же std::array,

Вам нужно прочитать хорошую вводную книгу по современному C ++. Начать с «Тур по С ++».


Если вы делаете ручное управление ресурсами (… почему?), Вы также хотите следовать правило пяти.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector