C++ |使用 STL 双端队列和适配器设计实现堆栈

C++ | Implementing a Stack using STL deque and Adapter design

正在准备考试,并通过了这个我无法自信回答的问题。 假设我们需要使用 STL deque 和 Adapter 设计来实现 Stack,以下哪种方法是正确的:(只能有一个答案)

1. template <typename T> class stack: public deque<T> {};
2. template <typename T> class stack {private: deque<T>* dptr; };
3. template <typename T> class stack {protected: deque<T>* dptr; };
4. template <typename T> class stack {private: deque<T> {};}
5. template <typename T> class stack: private deque<T> {};
6. template <typename T> class stack {protected: deque<T> d; };

任何有关解决方案的提示都将不胜感激。谢谢。

您永远不想从 STL 容器公开继承。它们根本不是为此而设计的,因为 "pay as you go" 原因它们没有虚拟析构函数。其他形式的继承只是简单地创建未命名的成员,在这种情况下不会为您提供任何用途(它们对于使用 C API etc 可能很有用)。所以这排除了 1 和 5。所以现在你可以拥有一个私人或受保护的成员。选择受保护,因为这会为其他 类 继承自您的人保留选项。所以剩下 3 和 6。现在你想要按值还是按指针。这是一个 STL 容器,它可以在被破坏时愉快地管理自己的资源,这与原始指针不同。所以 6 是明显的赢家。