Ваш вопрос не имеет ничего общего с динамическим размещением.
Когда вы говорите struct node { ... };
в C ++, он создает два имени типа, node
и struct node
, оба ссылаются на один и тот же тип.:
node x;
struct node y; // x and y are variables of the same type
Причиной этого немного странного поведения является то, что C ++ был основан на C. В C struct node { ... };
создает только одно имя типа struct node
.Вы должны использовать typedef
вручную, чтобы получить более короткое имя, которое не включает struct
:
typedef struct node { ... } node; // C
C ++ хотел упростить создание коротких имен типов без необходимости везде вводить struct
, покав то же время сохраняя совместимость с существующим кодом C.
(Также есть общая unix-функция, называемая stat
, которая принимает указатель на структуру, также называемую stat
:
int stat(const char *, struct stat *);
Здесь struct stat
однозначно относится к типу, а не к функции. C ++ должен был поддерживать этот синтаксис для возможности вызова stat
.)
Ваш код написан в странном C-подобном стиле(который включает в себя ключевое слово struct
везде), но new
не существует в C, поэтому он не может быть фактическим C.