从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; });
}