Задать вопрос
@RusichNSK

Корректно ли вызывать метод у временного объекта?

Добрый день.

В Builder C++ придумал вот такое выражение:
std::make_unique<TForm>(Application)->ShowModal();

По моему представлению, код корректный (и он работает). Но, DeepSeek упорно утверждает, что так делать нельзя - unique_ptr начнет разрушать хранимый объект TForm раньше, чем система освободит ресурсы формы.

Эту же конструкцию я использую и вот в таком виде:
if(std::make_unique<TForm>(Application)->ShowModal() == mrOk)
    sb_refreshClick(Sender);
  • Вопрос задан
  • 117 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
DeepSeek галлюционирует. Временные объекты живут до конца выражения. unique_ptr начнет уничтожение после выполнения всего выражения.

Вот ссылки на стандарт:

make_unique<> является prvalue: https://en.cppreference.com/w/cpp/language/value_c...
prvalue: a function call or an overloaded operator expression, whose return type is non-reference


В момент вызова происходит материализация временного объекта: https://en.cppreference.com/w/cpp/language/lifetime

Temporary objects are created ... in the following situations:
when performing member access on a class prvalue.


Там же написано:
All temporary objects are destroyed as the last step in evaluating the full-expression


Т.е. возвращенный make_unique объект будет уничтожен только в конце строки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
Не надо спрашивать у ИИ, они для этого не преназначены, даже если кто-то утверждает обратное. Каждое слово ИИ надо проверять на достоверность, если правильность ответа имеет значение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы