Boost logo

Boost Users :

From: Arne Vogel (Arne.Vogel_at_[hidden])
Date: 2005-05-19 05:10:04


Vladimir Krasovsky wrote:

>Hello Arne,
>
>
>
>
>>scoped_ptr cannot be used with incomplete types, unfortunately, and thus
>>is not available for use in the pimpl idiom.
>>
>>
>
>Please read http://www.boost.org/libs/smart_ptr/scoped_ptr.htm . Near
>the end of page you can see
>"One common usage of scoped_ptr is to implement a handle/body (also
>called pimpl) idiom which avoids exposing the body (implementation) in
>the header file."
>
>Examples are also there.
>
>

Hello Vladimir,

I stand corrected. So it's actually not "scoped_ptr cannot be used with
incomplete types"
but "scoped_ptr's destructor cannot be instantiated with incomplete types".

So

class UsingPimpl {
private:
    struct Impl;
    boost::scoped_ptr<Impl> impl;

public:
    UsingPimpl();

    void doSomething();
};

won't work, but by adding UsingPimpl's destructor declaration (to
inhibit automatic generation) to the
definition of UsingPimpl, and the destructor's definition (after
UsingPimpl::Impl has been defined) to
the implementation file, it can be made to work.

Thanks a lot,
Arne Vogel


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