Results 1 to 4 of 4

Thread: Result vrij geven

  1. #1

    Result vrij geven

    Hallo allemaal,

    In onderstaand fragment is de vraag moet Result in de
    Function A niet vrij worden gegeven en zo ja hoe dan wel?

    Code:
    Function A(Tx,Ty : Integer) : TBGRABitmap;
    begin
       Result := TBGRA.Create(Tx,Ty);
       ...
       Result : InvalidateBitmap;
    end;
    
    Function B(Tx,Ty : Integer) : TBGRABitmap;
    begin
      Result := A(Tx,Ty);
    end;

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Bij mij is de regel (een héle enkele uitzondering daargelaten): alleen een constructor mag een object maken en de aanvrager is dan verantwoordelijk voor de instance: functies kunnen "Nooit" een instance naar een nieuw object teruggeven.
    Mocht er iets moeten gebeuren met een object, dan maakt de aanroepende code deze aan, geeft deze als parameter door aan de "DoeErIetsMee" method en geeft hem weer vrij als alles klaar is (binnen een try...finally-blok).

    Je hebt de code in jouw voorbeeld "Ongeveer" gekopieerd/overgetikt want dit (Result : InvalidateBitmap) gaat zo niet werken (ik kan het mij althans niet voorstellen).
    Zonder me te verdiepen in TBGRABitmap zelf (ik heb geen FreePascal/Lazarus draaien), maar als het geen interface is, dan moet je de instance "Ergens" zelf opruimen.
    TMemoryLeak.Create(Nil);

  3. #3
    Ik ben het met VideoRipper eens.
    Logischer is:
    Delphi Code:
    1. procedure A(Tx,Ty : Integer; ABitmap: TBGRABitmap)
    2. begin
    3.   ...
    4. end;
    5.  
    6. //ergens anders
    7. procedure MaakEenBitmapDoeErIetsMeeEnRuimHemWeerOp;
    8. var
    9.   Bmp: TBGRABitmap;
    10. begin
    11.   ...
    12.   Bmp := TBGRABitmap.Create;
    13.   A(X,Y,Bmp);
    14.   ...
    15.   Bmp.Free;
    16. end;

    Bart

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Ik snap Frans wel. Als de procedure vrij groot wordt, kan je de code leesbaarder maken door dit in stukjes te haken. Maar als iets lokaal wordt gedeclareerd, wil je dit ook opruimen in de zelfde functie. Overigens. Doet lazarus dit ook regelmatig.
    Delphi is great. Lazarus is more powerfull

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •