C++ FAQ Celebrating Twenty-One Years of the C++ FAQ!!!
(Click here for a personal note from Marshall Cline.)
Section 11:
[11.11] When I write a destructor, do I need to explicitly call the destructors for my member objects?

No. You never need to explicitly call a destructor (except with placement new).

A class's destructor (whether or not you explicitly define one) automagically invokes the destructors for member objects. They are destroyed in the reverse order they appear within the declaration for the class.

class Member {
public:
  ~Member();
  ...
};

class Fred {
public:
  ~Fred();
  ...
private:
  Member x_;
  Member y_;
  Member z_;
};

Fred::~Fred()
{
  // Compiler automagically calls z_.~Member()
  // Compiler automagically calls y_.~Member()
  // Compiler automagically calls x_.~Member()
}