Re: Smart-pointer pimpl and compiler-generated destructors.
In article
<5aeac85f-65ad-4433-930e-63f7a1cdb798@t54g2000hsg.googlegroups.com>,
rwf_20 <rfrenz@gmail.com> wrote:
I'd like to use pimpl to reduce dependencies as follows:
// myClass.h
#include <memory>
class myClass {
public:
myClass();
private:
struct myStruct;
std::auto_ptr<struct myStruct> m_pimpl;
};
Auto_ptr<T> does not have 'usual' copy and assignment semantics,
therefore MyClass needs a user provided copy ctor and assignment
operator at the very least.
you need at least
myClass(const myClass &);
myClass & operator = (const myClass &);
added to the public interface if the class is copyable and if not
copyable to the private access without impliementation.
implementaiton needs at least
myClass::myClass(const myClass &r):m_pimple(new
myStruct(*r.m_pimple.get())) {}
myClass & myClass::operator = (const myClass &r)
{
std::auto_ptr<myStruct> p(new myStruct(*r.m_pimple.get()));
// self copy is now safe...
m_pimple = p;
return *this;
}
not tested but at least the m_pimple is copied if the class is copied
or assigned and the original still contains auto_ptr<> that owns an
object.
code written on the fly but the idea is the auto ptr must be deep copied
if the class is copied, [in general the pimple probably needs deep
copying ,unless it contains unchanging data ].
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]