std::stack は継承してはいけないとこのサイトに書いてあるのですが、ホント(?_?)
今、std::stack を継承して、std::stack の基底クラコンテナである deque のイテレータシステムを使うことで、イテレータの使えるstack を作ろうとしています
クラスの定義
C++
1 2#include <stack> 3#include <deque> 4#include <iostream> 5 6template<typename T> 7class MutantStack: public std::stack<T> 8{ 9 public: 10 typedef typename std::stack<T>::container_type::iterator iterator; 11 iterator begin(void); 12 iterator end(void); 13 MutantStack(); 14 MutantStack(const MutantStack&); 15 MutantStack &operator=(const MutantStack&); 16 ~MutantStack(); 17}; 18
メンバ関数実装
C++
1#include "mutantstack.hpp" 2 3template<typename T> 4MutantStack<T>::MutantStack() 5{} 6 7template<typename T> 8MutantStack<T>::MutantStack(const MutantStack&) 9{} 10 11template<typename T> 12MutantStack<T>::~MutantStack() 13{} 14 15template<typename T> 16typename MutantStack<T>::iterator MutantStack<T>::begin() 17{ 18 return(this->c.begin()); 19} 20 21 22template<typename T> 23typename MutantStack<T>::iterator MutantStack<T>::end() 24{ 25 return(this->c.end()); 26} 27
ですが、上記のサイトには、「仮想デストラクタ(【言語解説】第27章)ではないので、stack を継承して使用することは不適切であることに注意してください。」と書いてあったので継承はNGなのか…と思いました。確かに....
でもこのクラスを使ってもメモリリークはしなんいんですよね...
加えて、ソースコードを追うとそもそもstd::deque
も仮想デストラクタを持っていないようです。
結局std::stack は継承してもいいのでしょうか?
std::stack のソースコードがなぜか見つからなかったので、もしstd::stack のソースコードのリンクを知ってる方がいたらそれも合わせて教えていただきたいです
よろしくおねがいします m(_ _)m
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/14 11:54
2021/01/14 11:59
2021/01/14 11:59