« Return to Thread: RFC - lifetime management

Re: RFC - lifetime management

by Martin Schulz-3 :: Rate this Message:

Reply to Author | View in Thread

> Still, the heap class is even more clear, easier to use and
> easier to reason about.
> I see the following benefits over
> std::vector<boost::shared_ptr<void> >:
>
>   1. More informative class and method names

Well, the name heap makes me think of a certain kind of memory
management system. Probably a name like Keepalive_bucket would
be clearer?

>       Heaps should be non-copyable, vectors aren't.

Ok, that is a design choice and clearly influences the semantic.

>   5. Raw pointers can be handled more efficiently than shared_ptrs

But think of it - if that pointed-to object is in use by some other
means,
it would be destroyed by the heap destructor nevertheless. Using shared
pointers, the pointed-to objects are kept alive as long as either the
heap
lives or as long they are used, whatever is longer.

>   6. Better syntax. Repeating a long type name twice as with
> boost shared_ptr can be tedious

Yes, I already noted that.

> Still I'm not sure if these points are enough to motivate a
> new utility class. It's not exactly a killer app, even though
> I find it very useful in MVC architectures (linking
> controllers life time to views) and classes with lots of RAII
> members. What do you think?

If ist helpfull to you, then go ahead and use & improve it.


An (untested) wrapper class I would start with would be something like:

class Keepalive: private boost::noncopyable {
        Std::vector< boost::shared_ptr<void> > v;
public:
        template <typename T> void put(boost::shared_ptr<T> p) {
v.push_back(p); };
        template <typename T> void put(std::auto_ptr<T>& p) {
v.push_back(boost::shared_ptr<T>(p)); };
        template <typename T> void put(T *p) {
v.push_back(boost::shared_ptr<T>(p)); };
};

Does that solve your needs?

--
Dr. Martin Schulz (schulz@...)
Software Engineer
Synopsys GmbH
Karl-Hammerschmidt-Str. 34
D-85609 Dornach, Germany
Munich office: +49 (89) 993-20203
Home office:   +49 (721) 6099511
http://www.synopsys.com
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

 « Return to Thread: RFC - lifetime management