Re: How to terminate an object that's in a collection



I tested this out.

Class1:
Public s As Integer

Module1:
Public Sub run()

Dim C As Collection
Set C = New Collection

Dim D As Collection
Set D = New Collection


Dim tmp As Class1
Set tmp = New Class1

C.Add tmp
tmp.s = 1

D.Add tmp
tmp.s = 2

MsgBox C.Item(1).s
MsgBox D.Item(1).s

End Sub

Output:
2,2

Therefore, they are added by ref.



"George Nicholson" wrote:

Pretty sure that with custom classes you are adding a
copy of the object to a collection

In my experience, if i create an object from a custom class with a
"StartTime" property, then add that object to 2 different collections,
changing the StartTime of one will not change the StartTime in the other.

My memory is pretty clear on this, but it is not clear on whether there
might have been something else involved. Maybe it was a custom collection
that I hadn't set up properly.


"Peter T" <peter_t@discussions> wrote in message
news:eQlBFR4tHHA.3468@xxxxxxxxxxxxxxxxxxxxxxx
Indeed George, while the MyClass reference exists so does the Class, my
mistake in adjacent post.

Not sure about this bit though -

Pretty sure that with custom classes you are adding a
copy of the object to a collection

Adding the class object to the collection adds a pointer to the sole class
object, which may also be referenced by other object variables, ?

Coll.Add MyClass, "Test"
Coll.Remove 1 'removes item from collection, but MyClass still exists
Set MyClass = Nothing 'Removes MyClass from memory

could also do this -

Coll.Add MyClass, "Test"
Set MyClass = Nothing ' or goes out of scope
Coll.Remove 1 'removes item from collection, and destroys the class

Regards,
Peter T

"George Nicholson" <GeorgeNJunk@xxxxxxxxxxx> wrote in message
news:eGdg413tHHA.4424@xxxxxxxxxxxxxxxxxxxxxxx

Coll.Add MyClass, "Test"
Coll.Remove 1 'removes item from collection, but MyClass still exists
Set MyClass = Nothing 'Removes MyClass from memory

You are adding an object to the collection, but the object also exists in
memory outside of the collection. Any given object could possibly exist
in
multiple collections. (Pretty sure that with custom classes you are
adding
a
copy of the object to a collection. In my experience, changing a property
of
a custom object in one collection will not "update" the same object's
property in another collection.)

Removing an object from a collection won't remove it from memory, unless
it
is the last outstanding reference to the object.

Coll.Add MyClass, "Test"
Set MyClass = Nothing 'removes 1st instance from memory (coll.count
still
equals 1)
Coll.Remove 1 'removes object from collection and memory

HTH,

"vivmaha" <vivmaha@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:F9730525-3BFF-4A23-A12E-E117F3B425CB@xxxxxxxxxxxxxxxx
"Coll" is a standard VBA Collection object.
The first item in it is a MyClass object.
How do I delete this object? (and free the memory used)

This does not work:
Coll.remove 1 'The memory of item 1 is still allocated

This crashes:
Set Coll.item(1) = nothing '<Crash occurs here (Err 438)
Coll.remove 1

Thanks.







.



Relevant Pages

  • Re: Object creation overhead
    ... one particular use is to reduce the memory ... 'MyClass'; this class looks like: ... 20,000 'String' objects is needed, both to manage them, and for the 'String' ... The 'proxy' class approach won't see a reduction in the number of 'MyClass' ...
    (comp.lang.java)
  • Re: C# confusion
    ... If you create instances of MyClass, ... you are allocating an area of memory for the data segment for each ... data members are initialised upon first reference of the class. ... static keyword; This one has been hitting me like a hammer on the ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: C# confusion
    ... MyClass" then you will never create an instance of MyClass on the heap, ... so any instance members you declare in MyClass will never exist. ... of memory: not the stack and not the heap, ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: How to terminate an object thats in a collection
    ... Another way to refer to multiple instances of the same class would be with ... Dim arrClassas Class1 ... Coll.Remove 1 'removes item from collection, but MyClass still ... Removing an object from a collection won't remove it from memory, ...
    (microsoft.public.excel.programming)
  • Re: Add/remove zero index of array
    ... That amounts to around 200 MB of memory needed to hold ... Private Type SAFEARRAY1D ... Dim NumOfRecs As Long ... BindArray Tmp, VarPtr ...
    (microsoft.public.vb.general.discussion)