Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

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

呼び出し順も想定通りなのでこれでいいはず。