C++で型情報を持ったままにしておく
やりたいこと
型情報なしに管理したいがないと削除時に困る。削除時だけは型情報が欲しい。
コード
#include <iostream> using namespace std; class Foo { public: Foo() { cout << "Foo" << endl; } virtual ~Foo() { cout << "~Foo" << endl; } protected: void *m_data; }; template<typename T> class Bar : public Foo { public: Bar() { cout << "Bar" << endl; m_data= new T; } virtual ~Bar() { delete reinterpret_cast<T*>(m_data); m_data = nullptr; cout << "~Bar" << endl; } }; class Member { public: Member() { cout << "Member" << endl; } ~Member() { cout << "~Member" << endl; } }; int main() { Bar<Member> bar; }
出力結果
Foo Member Bar ~Member ~Bar ~Foo
呼び出し順も想定通りなのでこれでいいはず。