代码之家  ›  专栏  ›  技术社区  ›  Anthony Burg

替换已弃用的发布功能

  •  3
  • Anthony Burg  · 技术社区  · 8 年前

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

    我在一些 TForm 延迟销毁的对象。我能找到的一切(参见 these docs )是(在C++中) delete 应该改为使用,但我不认为这是一种延迟销毁的形式。

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

    3 回复  |  直到 8 年前
        1
  •  2
  •   Remy Lebeau    8 年前

    我不知道为什么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; });
    }
    
        2
  •  1
  •   lukie    5 年前

    在Delphi中,您可以使用

    ReleaseForm;
    

    我想它也适用于C++Builder。

        3
  •  0
  •   Jeremy Caney Abloin    6 年前

    在Delphi 10.4中 OnClose 事件 TForm . 我想他们希望你把它设置为 caFree 而不是打电话 Release .