【问题标题】:Replacement for deprecated Release function替换已弃用的 Release 功能
【发布时间】:2018-06-04 16:53:19
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我会接受这个解决方案,因为 Embarcadero 似乎还没有标准的替代品,所以像这样的策略是正确的策略,除非或直到他们带来替代品。目前,我将简单地保留 Release 调用,如果将来的版本不再支持它们并且没有替换功能,我可能会实施此解决方案。
    【解决方案2】:

    在 Delphi 10.4 中,TFormOnClose 事件中有一个动作。我假设他们希望您将其设置为 caFree 而不是调用 Release

    【讨论】:

      【解决方案3】:

      在 Delphi 中你可以使用

      ReleaseForm;
      

      我认为它也适用于 C++ Builder。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-22
        • 2014-03-11
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多