替换已弃用的 Release 函数

Replacement for deprecated Release function

自 C++Builder 10.2 Tokyo(或更早版本)起,FMX.Types.TFmxObject.Release() 方法已弃用。

我在某些 TForm 对象上使用此方法来延迟销毁。我所能找到的(参见 these docs)是(在 C++ 中)应该使用 delete,但我不认为这标志着延迟销毁的形式。

在这种情况下是否应该使用 Release() 的替代品?

我不知道为什么 Embarcadero 已弃用 Release() 或他们打算将其替换为什么,但您可以尝试使用 TThread::ForceQueue()delete TForm 对象,例如:

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

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

或者,如果您使用的是基于 Clang 的编译器,则可以改用 C++11 lambda:

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

在 Delphi 10.4 中,TFormOnClose 事件中有一个动作。我假设他们希望您将其设置为 caFree 而不是调用 Release.

在Delphi中你可以使用

ReleaseForm;

我认为它也适用于 C++ Builder。