I'm trying to learn this from Prata C++ Primer Plus, ch. 12, and wanted to try to summarize the result here because it seems kind of tricky. Please correct me if I haven't understood this correctly.
The problem is essentially that if you use new in a constructor (and, accordingly, delete  in the destructor), there are a lot of implicit constructions that go on and can easily create some problems.
If I'm understanding it correctly, the cure for these problems is to define explicitly your copy constructor as well as the exact way in which the assignment operator is overloaded. The basic form for the prototype of your copy constructor should be:
ClassName(const ClassName &);
And the prototype for overloading the assignment operator should be:
ClassName & operator=(const ClassName &);
I won't go into the implementation, which isn't long but also (for me at least) not easy to grasp, but for the moment plan on simply referring back to the book to review how it works whenever I end up dealing with this situation. The main thing is that you're normally (possibly always?) going to need to write both of these out explicitly if you want to allocate memory dynamically in your class constructor.