Прежде всего, этот код не будет компилироваться, потому что вы забыли точки с запятой после каждого объявления переменной-члена и после объявления MyItem
, и ключевое слово "struct" было введено неправильно.Ваш код должен выглядеть следующим образом:
struct MyItem
{
var value;
MyItem* nextItem;
};
MyItem item = new MyItem;
Теперь, отвечая на ваш вопрос, этот код не работает, потому что новый оператор возвращает указатель на созданный объект (значение типа MyItem*
), и вы пытаетесьназначить этот указатель переменной типа MyItem
.Компилятор не позволяет вам сделать это (потому что значение и переменная имеют разные типы).Вы должны сохранить указатель в соответствующей переменной, например:
MyItem* item = new MyItem;
В этом случае вы должны запомнить delete item
, чтобы избежать утечки памяти, когда она вам больше не нужна.
Кроме того, вы можете создать объект в стеке без оператора new
.
MyItem item;
В этом случае объект перестает существовать, когда функция возвращается;вам не нужно помнить, чтобы удалить его.