Further to OriginalGriff's answer, there is something known as the
Rule of 3[
^]. It says that if a class implements a destructor, it should also implement a copy constructor and a copy assignment operator. This became the Rule of 5 in C++11, when the move constructor and move assignment operator were added. Those are more for efficiency, but it's a good idea to implement them too.
The rationale for this is that a destructor is usually implemented because an object has resources to free. So if the object is copied, copies of its resources must usually be created too.