#include <iostream>
#include <vector>

using namespace std;

class base
{
    public:
        virtual ~base(){}
};

template<typename T>
class derived : public base {
	public:
	derived(const T t_){}
};

class myClass
{
    public:
        template<typename T>
        myClass(const T t) : data(new derived<T>(t)){}
        ~myClass(){delete data;}
    private:
        base* data;
};

int main() {

	
    vector<myClass> vec;
    
    myClass obj(22);
    
    vec.push_back(obj); // constructor is invoked and then destructor is invoked, why?
	

	return 0;
}