Figure 7 Implementing smart pointers

class BMOIteratorImp;

class BMOIterator {
public:
  BMOIterator(const char *dbname);
  BMOIterator(const BMOIterator &);
  BMOIterator &
  operator=(const BMOIterator &);
  ~BMOIterator();
  BMOIteratorImp *operator->()
  {
    return imp;
  }
private:
  BMOIteratorImp *imp;
}

function()
{
  BMOIterator it("DBNAME");
// AddCol is a memeber of
// BMOIteratorImp
  it->AddCol("table.col1");
}
// End of File