I l@ve RuBoard Previous Section Next Section

Item 13. Writing Exception-Safe Code桺art 6

Difficulty: 9

And now for an even better Stack, with fewer requirements on T梟ot to mention a very elegant operator=().

Imagine that the /*????*/ comment in StackImpl stood for protected. Implement all the member functions of the following version of Stack, which is to be implemented in terms of StackImpl by using StackImpl as a private base class.



template <class T> 


class Stack : private StackImpl<T>


{


public:


  Stack(size_t size=0);


  ~Stack();


  Stack(const Stack&);


  Stack& operator=(const Stack&);


  size_t Count() const;


  void   Push(const T&);


  T&     Top();   // if empty, throws exception


  void   Pop();   // if empty, throws exception


};


As always, remember to make all the functions exception-safe and exception-neutral.

(Hint: There's a very elegant way to implement a fully safe operator=(). Can you spot it?)

    I l@ve RuBoard Previous Section Next Section