Announcement

Collapse
No announcement yet.

cafree versus FreeAndNil

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • cafree versus FreeAndNil

    Hallo,

    ich frage an einer bestimmten stelle ab ob ein formular = nil ist um zu wissen ob man darauf zugreifen kann:
    <pre>
    if form_mat <> nil then
    </pre>

    nun habe ich festgestellt, dass wenn das fomular schon mal geöffnet war und wieder geschlossen, dann kracht es, weil das formular anscheinend nicht mehr nil ist und ich versuche darauf zu zugreifen!

    nun habe ich im onclose-ereignis des formulars nachgeschaut und das hier gefunden:
    <pre>
    Action := caFree;
    </pre>

    das habe ich nun ersetzt durch
    <pre>
    FreeAndNil(form_mat);
    </pre>

    jetzt funzt es!
    was ist der unterschied zwischen Action := caFree; und FreeAndNil(form_mat);

    hat FreeAndNil(form_mat); irgendwelche nachteile?

    Gruß

    Markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Marcus,
    in einer Ereignisbehandlungsmethode eines Objektes sollte man dieses niemals zerstören.
    Lass das
    Action := caFree;
    und überschreibe den Destructor und setzte dort die Formularvariable auf nil.
    <CODE>
    ..
    destructor Destroy; override;
    ..
    destructor TForm_Mat.Destroy;
    begin
    Form_Mat := nil;
    inherited;
    end;
    </CODE>
    Fran

    Comment


    • #3
      hi frank,

      auch nicht im onclose-ereignis?
      meine lösung funzt nämlich!

      gruß

      Marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Mensch Marcus,
        das OnClose - Event ist immer noch Bestandteil der Klasse.
        Du kannst es so machen, aber wenn du in Zukunft nicht nach ominösen Fehlern forschen willst, solltest du so etwas <B>strikt vermeiden</B>.
        Fran

        Comment


        • #5
          Du kannst ja auch nur das OnClose ändern in:
          <CODE>
          Action := caFree;
          form_mat := nil;
          </CODE>
          Fran

          Comment


          • #6
            danke! genauso so habe ich es jetzt gemacht
            Herzliche Grüße

            Markus Lemcke
            barrierefreies Webdesign

            Comment

            Working...
            X