The short answer would be, no. If this is really all there is to Z, it won't
cause a memory leak.
Of course, this highly depends on how Z is actually used in your particular case.
Looking at the code, this seems to be a singly linked list of A instances (which I assume is abbreviated) which may contain "holes" represented as null pointers. If that is the case, and A values are always allocated via new, I'd recommend making the ownership explicit by using
std::unique_ptr<A> (from C++11 on or if TR1 is available) or
std::auto_ptr<A> (before C++11). You don't even need to define a destructor that way, because the default one will do what you need.
If the list does not contain any holes (i.e. hmm is never NULL/nullptr/0/whatever the trend for invalid pointers is this year) I' say, why not scrap the Z class altogether and use a
std::forward_list<A> (C++11!) or
std::list<A> instead. This conversion will only work fully if Z and its corresponding A are always created together.
If on the other hand, an instance of A may be shared by multiple Zs, neither the list nor the owning pointer approach will work. You'd have to use a
std::shared_ptr<A> (possibly in a list/forward_list) instead, which allows multiple pointers to the same object. This is only available in C++11 though. A
boost::shared_ptr may serve you as an alternative if you don't mind the boost dependency.
Addition after new post #5 while I wrote this:
That way, no memory is lost since de/allocation is handled by the compiler. And if you're on a relatively modern OS, even dynamically allocated memory will not remain unavailable, since they keep track of who allocated what and reclaim it when the process terminates.