Замена устаревшей функции Release

Начиная с C++Builder 10.2 в Токио (и, возможно, ранее), FMX.Types.TFmxObject.Release() метод устарел.

Я использую этот метод на некоторых TForm объекты для отложенного уничтожения. Все, что я могу найти (см. Эти документы), это (в C++) delete следует использовать вместо этого, но я не верю, что это знаменует собой форму для отложенного уничтожения.

Есть ли замена для Release() что следует использовать в этом случае?

1 ответ

Решение

Я не знаю, почему Embarcadero устарел Release() или что они намереваются заменить его, но вы можете попробовать использовать TThread::ForceQueue() в delete TForm объект, например:

void __fastcall TMyForm::ReleaseMe()
{
    // Release()
    TThread::ForceQueue(NULL, &DeleteMe);
}

void __fastcall TMyForm::DeleteMe()
{
    delete this;
}

Или, если вы используете компилятор на основе Clang, вы можете использовать лямбду C++11:

void __fastcall TMyForm::ReleaseMe()
{
    // Release()
    TThread::ForceQueue(nullptr, [this](){ delete this; });
}

В Delphi вы можете использовать

ReleaseForm;

Я предполагаю, что он есть и для C++ Builder.

В Delphi 10.4 есть действие в OnClose событие TForm. Я предполагаю, они хотят, чтобы вы установили его наcaFree вместо звонка Release.

Другие вопросы по тегам