[Gambas-user] Fwd: _free not called when object destroyed

Demosthenes Koptsis demosthenesk at gmail.com
Wed Aug 2 21:36:58 CEST 2023


if you try to assign to an object variable twice new objects, _free is 
called

for example:

    oApple = New Fruit
    oApple.Name = "Apple2"
    Print "oApple.Name=" & oApple.Name

    oApple = New Fruit
    oApple.Name = "Apple3"
    Print "oApple.Name=" & oApple.Name
--------------------------------------------------------

--------- Console -------------

oApple.Name=Apple2
Fruit is freed, i am in _free
oApple.Name=Apple3

----------------------------------


On 8/2/23 22:25, Demosthenes Koptsis wrote:
>
> i attache the project
>
>
>
> -------- Forwarded Message --------
> Subject: 	Re: [Gambas-user] _free not called when object destroyed
> Date: 	Wed, 2 Aug 2023 22:22:47 +0300
> From: 	Demosthenes Koptsis <demosthenesk at gmail.com>
> To: 	user at lists.gambas-basic.org
>
>
>
> For example, suppose you have a class Fruit.class and Main.module of a 
> command line project
>
> ------- Fruit.class ------------
>
> ' Gambas class file
>
> Public Name As String
>
> Static Public Sub _init()
>   Print "Fruit is created, i am in _init"
> End
>
> Public Sub _free()
>   Print "Fruit is freed, i am in _free"
> End
> --------------------------------------------------
>
> ---------- Main.module --------------------
>
> ' Gambas module file
>
> Public Sub Main()
>
>   'call CreateFruit
>   Print "I am in Main"
>   CreateFruit()
>   Print "I am back in Main after CreateFruit"
>
> End
>
> Public Sub CreateFruit()
>    Dim oApple As New Fruit
>    oApple.Name = "Apple"
>    Print "I am in CreateFruit, oApple Name is: " & oApple.Name
>
>    Print "I am in CreateFruit, before Apple=Null"
>    oApple = Null
>    Print "I am in CreateFruit, after oApple=Null"
> End
> ---------------------------------------
>
> You can create a Fruit object in a CreateFruit sub but when the code 
> goes out of scope of CreateFruit Sub the object is destroyed or if you 
> set its reference variable to NULL as it shows in Console
>
> ----------- Console -------------------
>
> I am in Main
> Fruit is created, i am in _init
> I am in CreateFruit, oApple Name is: Apple
> I am in CreateFruit, before Apple=Null
> *Fruit is freed, i am in _free**
> *I am in CreateFruit, after oApple=Null
> I am back in Main after CreateFruit
>
> ------------------------------------------
>
> if you set oApple = Null the object is freed
>
>
>
> On 8/2/23 19:32, Brian G wrote:
>> I have a question regarding when an object is destroyed and _free is 
>> called.
>>
>> in my code when I do the following then the object free method is called
>>
>> dim a as myobject = new myobject
>>
>> a = new myobject     ' when I do this then the old object _free 
>> method is called
>>
>> But if I
>>
>> a = NULL                  ' The _free method is never called for the 
>> object or for any object in an array of objects
>>
>> Maybe I don't understand correctly how this works, but I would expect 
>> the objects _free method to be called if there is no other reference.
>>
>>
>>
>>
>> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20230802/dbadf39d/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DestroyObject2.tar.gz
Type: application/gzip
Size: 13004 bytes
Desc: not available
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20230802/dbadf39d/attachment-0001.gz>


More information about the User mailing list