替换已弃用的 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 中,TForm
的 OnClose
事件中有一个动作。我假设他们希望您将其设置为 caFree
而不是调用 Release
.
在Delphi中你可以使用
ReleaseForm;
我认为它也适用于 C++ Builder。
自 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 中,TForm
的 OnClose
事件中有一个动作。我假设他们希望您将其设置为 caFree
而不是调用 Release
.
在Delphi中你可以使用
ReleaseForm;
我认为它也适用于 C++ Builder。