已弃用的Release函数的替换

问题描述 投票:1回答:1

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

我在一些TForm对象上使用这种方法来延迟破坏。我所能找到的(参见these docs)是(在C ++中)应该使用delete,但我不相信这标志着延迟破坏的形式。

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

firemonkey c++builder c++builder-10.2-tokyo
1个回答
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; });
}
© www.soinside.com 2019 - 2024. All rights reserved.