$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Philippe A. Bouchard (philippeb_at_[hidden])
Date: 2003-10-05 09:03:37
Douglas Gregor wrote:
[...]
> Personally, I'd like to have one of these types. I don't care if it's
> called shifted_ptr, gc_ptr, or lazy_bum_ptr; it would help me greatly
> :)
lazy_bum_ptr<> will have to be negociated ;)
[...]
> // foo1.cpp
> class Pointee;
> // copy shifted_ptr<Pointee>'s around and such
>
> // foo2.cpp
> #include "Pointee.h" // get definition with traits
> // do stuff with shifted_ptr<Pointee>
>
> foo1.cpp and foo2.cpp both have shifted_ptr<Pointee>'s that act
> differently, causing very bad things to occur. The moral? Don't use
> traits to decide anything unless you also require the full definition
> of the class, or encode the policy in the shifted_ptr type.
Yeah this is also true. Let's discuss the "ownership" paradigm:
+ perfect solution for 1d / 2d / nth d containers, ropes, neural networks,
etc.;
+ is able to play the role of an auto_ptr<> and a weak_ptr<> at the same
time;
- it is possible to create dangling smart pointers in this case (dangling
"weak_ptr<>s");
- cannot be easily casted to other pointee types.
[...]
>> Any thoughts?
>
> I think it might be more fruitful to concentrate on a good,
> garbage-collected pointer. Two questions on this:
>
> 1) Do you really need BOOST_GC_DEACTIVATE, if could users just
> instead switch over to something like shared_ptr if they really don't
> want to use GC? There's no need to allow (or require users to
> understand) customization when alernatives already exist.
If someone wrote his program with shifted_ptr and suddenly decides to
accelerate his program he could simply define this macro, recompile & tada!
it works like a normal reference count smart pointer & becomes faster.
> 2) The ability to explicitly destroy (or break) cycles would be
> very nice to have. Have you considered something akin to weak_ptr,
> that allows references but doesn't keep the target alive? (Note: I
> haven't thought about the implementation this _at all_, so I'll
> understand completely if you say it's infeasible or too costly).
This sounds a little bit like the ownership concept.
As for explicit destruction, it could create dangling smart pointers but it
would be at the user's discretion to perform the call.
Philippe