В C ++ символы часто меняют значение в зависимости от их контекста. В
HEAP num =* new HEAP
*
- это оператор разыменования . Это получает значение объекта из указателя. *
В
HEAP *num = new HEAP
*
не является оператором, это часть типа, обозначающая, что переменная является указателем.
*
также используется в качестве оператора умножения. Обратите внимание, что *
может быть перегружен, чтобы делать все, что хочет программист, но это должно быть зарезервировано для поведения, подобного умножению и разыменованию, чтобы избежать путаницы.
Так что же они делают?
HEAP num =* new HEAP
Копировать конструкции Автоматическая переменная HEAP num
, которая представляет собой HEAP
, с источником * new HEAP
, где * new HEAP
- указатель на Динамически распределяемое HEAP
, которое быстро разыменовывается с помощью оператора *
, чтобы получить его значение. Не используйте эту опцию, потому что нет указателя на динамическое распределение, что делает его практически невозможным для освобождения. Это утечка памяти.
HEAP *num = new HEAP
Инициализирует автоматически переменную HEAP *num
, которая является указателем на HEAP
, с указателем на динамически назначаемую HEAP
. Избегайте использования этого параметра, поскольку он требует, чтобы программист вручную управлял владельцем выделения, путем delete
, точно один раз в будущем. Удивительно, как трудно получить такую простую вещь, чтобы понять все правильно.
Рекомендации
Предпочитают
HEAP num;
, которая является автоматической HEAP
переменной, так что вам не нужно беспокоиться о владении или
std::unique_ptr<HEAP> num = std::make_unique<HEAP>();
, которая является автоматической std::unique_ptr<HEAP>
переменной, которая содержит динамически распределенную HEAP
и управляет владением для вас. Документация для std::unique_ptr
.
Как вернуть (2)?
HEAP * getHeapPointer()
{
HEAP * num = new HEAP;
return num;
}
или просто
HEAP * getHeapPointer()
{
return new HEAP;
}