Использование new
. Вам не нужно использовать malloc
в программе на C++, если только он не взаимодействует с некоторым кодом C, или у вас есть некоторые причины для управления памятью особым образом.
Ваш пример node = malloc(sizeof(Node))
это плохая идея, потому что конструктор Node
(если таковая существует) не будет называться, и последующее delete node;
бы неопределенные результаты.
Если вам нужен буфер байтов, а не объект, вы вообще хотите сделать что-то вроде этого:
char *buffer = new char[1024];
или, предпочтительно, что-то вроде этого:
std::vector<char> buffer(1024);
Обратите внимание, что для второго примера (с использованием std::vector<>
) нет необходимости в объекте delete
; его память автоматически будет освобождена, когда она выйдет за рамки. Вы должны стремиться избегать как new
, так и malloc
в программах на C++, вместо этого используя объекты, которые автоматически управляют собственной памятью.
Обратите внимание, что в C++ не существует неявного приведения из void *, поэтому в случае с malloc вам нужно фактически выполнить 'Node * node1 = reinterpret_cast (malloc (sizeof (Node)), что явно чересчур печатает. :) (Хорошо, вы тоже можете сделать C-стиль, но почему вы кодируете на C++? :) –
Старайтесь не применять C на C++ слишком много, они разные языки с вещами, сделанными по-разному. – GManNickG