$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [pimpl] Mini Review
From: Sergiu Dotenco (sergiu.dotenco_at_[hidden])
Date: 2011-05-26 11:37:52
Am 26.05.2011 11:22, schrieb Artyom Beilis:
> The only advantage I can see in boost.pimpl over scoped_ptr or auto_ptr
> is that it does not require explicit destructor.
>
> i.e.
>
>
> class Foo : boost::noncopyable {
> public:
> Foo();
> int x() const;
> void x(int v);
> private:
> struct data;
> std::auto_ptr<data> d;
> };
>
> No good. You need to add
>
> ~Foo();
>
> So it would know to destroy Foo::Data correctly.
You can't use std::auto_ptr for pimpl implementation in portable code.
Doing so is undefined behavior. To quote ISO/IEC 14882:2003 (§17.4.3.6,
p. 329):
"In particular, the effects are undefined in the following cases:
[...]
â if an incomplete type (3.9) is used as a template argument when
instantiating a template component, unless specifically allowed
for that component."
which applies to most standard library types.