Используйте 1_. Вам не нужно использовать 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++, вместо этого используя объекты, которые автоматически управляют своей собственной памятью.
person
Kristopher Johnson
schedule
29.04.2010
Node *node1 = reinterpret_cast<Node*>(malloc(sizeof(Node));
, что явно требует слишком большого объема ввода. :) (Хорошо, хорошо, вы тоже можете сделать приведение в стиле C, но тогда почему вы кодируете на C++? :)) - person dash-tom-bang   schedule 30.04.2010