From: Kevin R. <kr...@ku...> - 2005-12-30 12:13:56
|
Marcelo, I've decided to not persue requiring !nodefaultdtor until I can come up with some good test cases. The big question for you is, can I modify makeDestructor() to add the Setattr() call so it looks like any other destructor? Kevin Marcelo Matus wrote: > Kevin Ruland wrote: > >> William: >> >> William S Fulton wrote: >> >> >> >>> Hopefully Marcelo will have a better idea about your nodeType solution >>> as he has been working in this area. To me this should be set whenever >>> the node is created, rather than an add on in the Language class. >>> >>> >> >> The Langauge class has a method called makeDestructor() which generates >> the node for the default dtor. It was in this method that I added the >> Setattr. Actually, the makeDestructor() function is static at file >> scope in lang.cxx so it's really not a part of the Language class >> itself. This is probably the best place for this. >> >> >> >>> I'm not sure about suppressing the default constructors/destructors. >>> Unless there is a very good reason it would be better if php was >>> consistent with all the other languages and generate destructor >>> wrappers. Why do you want to suppress their generation - how is a user >>> going to free up the memory created? This area is highly customisable, >>> even more so since Marcelo's recent mods, so a user can always tailor >>> the generation if they so desire. >>> >>> >> >> You might be right. PHP does do garbage collection for all wrapped >> objects/structs. The programmer should not call the destructors >> manually because that will cause double frees even when you aren't using >> the proxy class generation. I actually thought I had found a place >> where resources can be leaked in php and needed to add calls to >> destructors manually. >> >> > remember that mainly all the target languages do the same, ie, garbage > collection, but > they take care of the language objects, not the C++ allocated memory. > > for example, python call __delete__ when it things is needed, the user > never calls __delete__ > directly. In old swig-python, we use __delete__ to dispatch the proper > C++ delete operation. > > probably in php5 the equivalent method is > void *__destruct* ( void ) > > http://us3.php.net/manual/en/language.oop5.decon.php > > I don't know if there is something similar in php4. > > Marcelo |