Observations
A Sieve turns out to act like a Conduit, so it simplifies the code to use Conduit as a base class
Class Sieve does not need an explicit destructor, because class Conduit takes care of it
Class Sieve is the only one intended for end-user consumption