Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado
Re: Cleaning up inherited object classes
M. Katz wrote: > Cleaning up is my least favorite activity. Were my living room an IDL > object I'm sure it'd be full of dangling pointer references. Here's a > question regarding objects' Cleanup methods and inheritance. > > When an object inherits another object, methods can be overridden. So > what happens to the CleanUp method? It is special. > > If my House object inherits the Living_Room and Bathroom object > classes, will a call to HOUSE::CleanUp also call Living_Room::CleanUp > and Bathroom::Cleanup when obj_destroy, self is called? > > Let me put that another way. Suppose an object class, A, has pointer > fields. Unless someone tells me otherwise, I assume it's a good idea > two specifically free the pointers in that object's Cleanup routine. > Now, suppose another object class, B, inherits A. B has its own > pointers to clean up as well, so I write that into its cleanup > routine. > > It is sufficient to write the Cleanup methods like this? > > pro Bobj::CleanUp > ptr_free, self.Bpointer > obj_destroy, self > end > > pro Aobj::CleanUp > ptr_free, self.Apointer > obj_destroy, self > end > > Will Bobj::CleanUp's call to "obj_destroy, self" also call > Aobj::Cleanup so that self.Apointer can be freed as the object is > destroyed? > > Also, does the destruction of an object that contains a pointer field > also inherently free the pointer? or is it necessary to specifically > ask for that in the Cleanup? > > Now if I could only get the House::TakeOutTheTrash method to work > reliably my wife would be thrilled. > > M. Katz Hello, I think you simply call the cleanup method for each superclass. The following is the way I do it. PRO House::Cleanup DoMyOwnCleanUpofLocalPointersAndObjects Self->Living_Room::CleanUp Self->Bath_Room::Cleanup END Provided that HOUSE was defined this way. PRO House__Define struct = {House, $ INHERITS Bath_Room, $ INHERITS Living_Room} END If Bath_Room inherits from some other object, such as READING_ROOM, then it will call that superclass' cleanup method if you have Bath_Room's cleanup as ... PRO Bath_Room::Cleanup self->Reading_Room::Cleanup END I would defer to other's on the question if a subclass MUST have its own CLEANUP method. I haven't tried it, but I'm not sure that it does (unless it has its own pointers and objects to cleanup.) Cheers, Ben
Ben Tupper writes: > I would defer to other's on the question if a subclass MUST have its own > CLEANUP method. I haven't tried it, but I'm not sure that it does > (unless it has its own pointers and objects to cleanup.) I'll tell you this, I have spent an *untold* number of hours chasing down memory leaks only to find that I forget to call a superclass CLEANUP method from my object's CLEANUP method! I've done it so often this is the *FIRST* thing I look for when I'm chasing memory leaks now. Who says you can't teach an old dog new tricks? Cheers, David -- David W. Fanning, Ph.D. Fanning Software Consulting, Inc. Phone: 970-221-0438, E-mail: david@dfanning.com Coyote's Guide to IDL Programming: http://www.dfanning.com/ Toll-Free IDL Book Orders: 1-888-461-0155
Well another way would be to consider it already when writing your program. I always have the cleanup method just before the XX__define procedure. So for every inheritance I immediately add the superclass cleanup call and for every pointer the ptr_free (object, obj_destroy) function. marc David Fanning wrote: > Ben Tupper writes: > > >> I would defer to other's on the question if a subclass MUST have its own >> CLEANUP method. I haven't tried it, but I'm not sure that it does >> (unless it has its own pointers and objects to cleanup.) > > > I'll tell you this, I have spent an *untold* number > of hours chasing down memory leaks only to find that > I forget to call a superclass CLEANUP method from my > object's CLEANUP method! I've done it so often this > is the *FIRST* thing I look for when I'm chasing > memory leaks now. > > Who says you can't teach an old dog new tricks? > > Cheers, > > David >
Marc Schellens writes: > Well another way would be to consider it already > when writing your program. > I always have the cleanup method just before the > XX__define procedure. So for every inheritance I immediately add > the superclass cleanup call and for every pointer the ptr_free (object, > obj_destroy) function. Well, yeah. Now I do too. :-) Cheers, David -- David W. Fanning, Ph.D. Fanning Software Consulting, Inc. Phone: 970-221-0438, E-mail: david@dfanning.com Coyote's Guide to IDL Programming: http://www.dfanning.com/ Toll-Free IDL Book Orders: 1-888-461-0155