From: Joaquín Mª López Muñoz (joaquin_at_[hidden])
Date: 2006-06-29 10:02:19
Benoit ha escrito:
> I hope i am not being too naive, but what differences are there
> between your proposal and shared_ptr ? I can definitely see the object
> vs pointer access difference ; are there others ?
The main difference is that flyweight<T> enforces that *every*
flyweight object with the same value will have a pointer to the
same internal representation. shared_ptr does not provide any means
to automatically get this behavior. For instance, you are free to do this:
shared_ptr<string> p1(new string("hello"));
shared_ptr<string> p2(p1); // p1 and p2 share rep
shared_ptr<string> p3(new string("hello"));
where p1 and p2 share their representation while p3 holds a string
objects of its own. By contrast if you do:
the result is that f1,f2 and f3 internally point to the same "hello"
string. This "coalescing" work is what flyweight gets you in comparison
with shared_ptr. Of course, shared_ptr has a (wide) application
domain of its own where such coallescing is neither needed nor
acceptable. We are talking about different beasts.
> I am asking you this because, for the purpose you describe, i am
> currently using shared_ptr objects... Is it extremely wrong to do so ?
It all depends on your particular usage scenario. If your app semantics
guarantee that you cannot come up with a situation like the one described
above, then flyweight buys you nothing with respect to shared_ptr.
Otherwise, either you're having redundant copies around or else you
have implemented a mechanism for duplicate checking --which is
what flyweight internally does, of course.
I hope I've made myself clear, please come back if I haven't.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk