firemonkey - 替换已弃用的 Release 函数

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

从 C++Builder 10.2 Tokyo(或许更早)开始,FMX.Types.TFmxObject.Release()方法已弃用。

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

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

最佳答案

我不知道为什么 Embarcadero 弃用了 Release() 或他们打算将其替换为什么,但您可以尝试使用 TThread::ForceQueue() 删除 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; });
}

关于firemonkey - 替换已弃用的 Release 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47934665/

相关文章:

clang - 将旧项目从 C++Builder 10.2 迁移到 10.2.3 在运行时崩溃

android - 如何使用 Firemonkey 显示 Android 内存中的可用文件

c++ - 将 Linux 打开、读取、写入、关闭功能转换为在 Windows 上工作

c++ - TForm 隐藏在主窗口后面

delphi - 在Parallel::For中默认使用多少个线程?

linker-errors - 如何解决 “LME288/Unknown heap name”警告?

c++builder - 如何设置 TDirect2DCanvas.Pen.StrokeStyle?

c++ - Firemonkey:获得父控制形式

delphi - 如何在样式设计器之外的FireMonkey样式中编辑控件?

ios - (NSString *) 它是指针还是 NSString?