Это был вопрос в одной из моих книг (без ответа), о котором я думал уже несколько дней. Является ли ответ просто, что код С++ в конечном итоге сбой, потому что он создает ячейку памяти для мусора после каждой итерации?
Рассмотрим следующие фрагменты кода Java и С++, части двух версий приложения на основе графического интерфейса, которое собирает пользовательские настройки и использует их для сборки команды и ее параметров. Метод /function getUserCommandSpecification() возвращает строку, представляющую код команды и ее параметры. Возвращенная строка используется для создания требуемой команды, которая затем выполняется.
Предположим следующее:
(i) После создания в цикле while объекта Command (ссылка на cmd в случае Java или указана cmd в случае С++) ссылка/указатель cmd на сгенерированный объект больше не ссылается или не используется.
(ii) Приложение также определяет команду класса вместе с ее методом/функцией execute().
а. Какая из двух версий кода, подробно описанная ниже, в конечном итоге потерпит крах.
б. Объясните, почему версия программы вылетает, а другая не сбой.
Код Java
...
while (true) {
String commandSpecification = getUserCommandSpecification();
Command cmd = new Command(commandSpecification);
cmd.execute();
}
...
Код С++
...
while (true) {
string commandSpecification = getUserCommandSpecification();
Command* cmd = new Command(commandSpecification);
cmd -> execute();
}
...