Ответ 1
Оба делают разные вещи.
Первый создает объект с автоматическим временем хранения. Он создается, используется и затем выходит из области действия, когда заканчивается текущий блок ({ ... }
). Это самый простой способ создания объекта, и он точно такой же, как при написании int x = 0;
Второй создает объект с динамической продолжительностью хранения и допускает две вещи:
-
Точный контроль над временем жизни объекта, поскольку он не выходит за пределы области автоматически; вы должны уничтожить его явно с помощью ключевого слова
delete
; -
Создание массивов с размером, известным только во время выполнения, поскольку создание объекта происходит во время выполнения. (Я не буду вдаваться в подробности размещения динамических массивов здесь.)
Ни один из них не является предпочтительным; это зависит от того, что вы делаете, что наиболее подходит.
Используйте первое, если вам не нужно использовать последний.
Ваша книга на С++ должна охватывать это довольно хорошо. Если у вас его нет, продолжайте идти, пока вы не купили и не читали несколько раз один из них.
Удачи.
Исходный код поврежден, так как массив delete
a char
не имеет значения new
. Фактически, ничего new
d строка C-стиля; это произошло из строкового литерала. delete
ing, который является ошибкой (хотя и не генерирует ошибку компиляции, а скорее непредсказуемым поведением во время выполнения).
Обычно объект не должен нести ответственность за delete
за то, что он сам не сам new
. Это должно быть хорошо документировано. В этом случае правило полностью нарушается.