Объекты в C ++ находятся либо в автоматическом хранилище , либо в динамическом хранилище (есть также статическое хранилище , но это выходит за рамки вопроса).
Когда вы создаете объект с new
, вы создаете его в динамическом хранилище и возвращаете указатель на него.
Члены объекта, на который ссылается указатель, доступны с помощью оператора ->
:
test->get_number();
что эквивалентно:
(*test).get_number();
Бонусный балл 1:
У вас также есть утечка памяти в вашей программе, так как память, выделенная для test
, никогда не освобождается. Вам нужно явно позвонить delete test
, чтобы освободить его. (в данном случае это не фактическая утечка памяти, поскольку система освобождает память при выходе из программы, но вы должны знать об этом в будущем).
В этом случае вам следует, однако, использовать объекты автоматического хранения:
LinkedList test(5);
//...
test.get_number();
Таким образом, вам не нужно беспокоиться об управлении памятью, а также предпочтительнее использовать автоматически управляемые объекты вместо динамических.
Бонусный балл 2:
В c ++ типы, не относящиеся к модулю, инициализируются перед входом в тело конструктора, поэтому вам следует начать использовать списки инициализаторов:
LinkList::LinkList(int i) :
result(i)
{
};
Это предотвращает двойную инициализацию и является простым приемом оптимизации. Даже если для этого конкретного случая разница не заметна, вы должны начать привыкать к инициализации таких членов как можно раньше.