已弃用的Release函数的替换

时间:2017-12-22 00:57:49

标签: firemonkey c++builder c++builder-10.2-tokyo

从C ++ Builder 10.2 Tokyo开始(可能更早),不推荐使用FMX.Types.TFmxObject.Release()方法。

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

在这种情况下,是否应该替换Release()

3 个答案:

答案 0 :(得分:2)

我不知道为什么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; });
}

答案 1 :(得分:0)

在Delphi 10.4中,OnClose的{​​{1}}事件中有一个动作。我假设他们希望您将其设置为TForm而不是调用caFree

答案 2 :(得分:0)

在Delphi中,您可以使用

ReleaseForm;

我认为C ++ Builder也可以使用它。