[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