From: John P. <jo...@ma...> - 2000-10-31 18:34:31
|
Ok, now that i have that solved how do I create an object that does not get destroyed after the SOME::Object goes out of scope? I don't want to keep track of more than one pointer per object loaded. Is there a way of telling the SOME::Object not to delete pointers after it has gone out of scope (persistance)? -Quinticent Thomas Matelich wrote: > I'll start with a list of statements: > 1) SOME::Object<T> hasA T*, but is overloaded to act likeA :) T*. > 2) To get the T* out of a SOME::Object, call the get() function. > Watch out that your SOME::Object doesn't delete the memory when you don't expect > it. > 3) If you want implicit conversion, define BOOST_SMART_PTR_CONVERSION. > This is dangerous because you might delete the pointer or have the memory go away > as in get() > 4) If BOOST_NO_MEMBER_TEMPLATES is not defined (and shouldn't need to be for g++), > SOME::Object<Base> should be able to be created from SOME::Object<Derived>. > > > > SOME::Object<mriIVisualAsset>oAsset(assets[0]); > > > //construct our asset > > > if(!oAsset.construct()){ ... > > > asset = static_cast<mriIAsset *>(oAsset); //error here. I'm guessting > > > //the > > template is not truly inheriting > > > > > > chest->addAsset( chestpos, asset );//I should be able to mix and match > > > // different assests in > > my chest > > Since I do love the shared_ptr so much I have propagated it through all my code. So I > don't have these problems. I was bit by the problem in number 2) above in a program > I'm using this with so that is why I have gone that route. It seems like the problem > here is that shared_ptr documentation is not included with the program. I would be > tempted to just suck the shared_ptr code into the SOME::Object, but I think having > things separate is good. On the other hand, I had to modify the shared_ptr code from > boost standard to make it inheritable. So the pros of inheritance is a smaller > interface for SOME::Object, and the cons are disjoint concepts and problems with trying > to use Object without understanding shared_ptr, also the fact that I had to change the > boost implementation. What do you think? > > So anyway the solution to your problem is one of the following: > 1) define BOOST_SMART_PTR_CONVERSION > 2) asset = static_cast<mriIAsset*>(oAsset.get()); > 3) use Object everywhere in place of pointers > 4) use shared_ptr everywhere in place of pointers > > A couple of other notes. I usually just use the lowest (furthest to the base) possible > level in my inheritance hierarchy as the template parameter for the Object. That way, > I don't have to worry about downcasting. Also, shouldn't static_cast be dynamic_cast? > > -- > Thomas O Matelich > Senior Software Designer > Zetec, Inc. > sos...@us... > tma...@ze... > > _______________________________________________ > somelib-devel mailing list > som...@li... > http://lists.sourceforge.net/mailman/listinfo/somelib-devel |