Boost logo

Boost Users :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2005-05-15 14:46:56


Jean-François Brouillet wrote:

> The following is a perfectly legal Java idiom which I
> find all over the place in the source I am porting.
>
> Basically it says: For simple use, just use me as is.
> I implement a default policy regarding so and so. However
> you are free to specify your own policy when required:
>
>
> interface I {
> void i() ;
> }
>
> class C implements I {
>
> I myI ;
>
> void i() {
> System.out.println("I.i() called, as implemented by C") ;
> }
>
> C() {
> myI = this ;
> }
>
> void
> setI(I i) {
> myI = i ;
> }
>
> void f() {
> myI.i() ;
> }
> }

You can do this with shared_ptr, but not with intrusive_ptr. ;-)

class C: private I
{
    shared_ptr<I> myI;

    void i(); // ...

    C( C const & );
    C& operator=( C const & );

public:

    C(): myI( this, null_deleter() )
    {
    }

    void setI( shared_ptr<I> const & i )
    {
        myI = i;
    }
};

A null_deleter works here because you know that the internal I and the
shared_ptr member have the same lifetime, that of C.

http://boost.org/libs/smart_ptr/sp_techniques.html#in_constructor

"Depending on context, if the inner shared_ptr this_ doesn't need to keep
the object alive, use a null_deleter as explained here and here."

http://boost.org/libs/smart_ptr/sp_techniques.html#static


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net