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?)
|