#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIGJhc2UKewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgfmJhc2UoKXt9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjbGFzcyBkZXJpdmVkIDogcHVibGljIGJhc2UgewoJcHVibGljOgoJZGVyaXZlZChjb25zdCBUIHRfKXt9Cn07CgpjbGFzcyBteUNsYXNzCnsKICAgIHB1YmxpYzoKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgICAgIG15Q2xhc3MoY29uc3QgVCB0KSA6IGRhdGEobmV3IGRlcml2ZWQ8VD4odCkpe30KICAgICAgICB+bXlDbGFzcygpe2RlbGV0ZSBkYXRhO30KICAgIHByaXZhdGU6CiAgICAgICAgYmFzZSogZGF0YTsKfTsKCmludCBtYWluKCkgewoKCQogICAgdmVjdG9yPG15Q2xhc3M+IHZlYzsKICAgIAogICAgbXlDbGFzcyBvYmooMjIpOwogICAgCiAgICB2ZWMucHVzaF9iYWNrKG9iaik7IC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgYW5kIHRoZW4gZGVzdHJ1Y3RvciBpcyBpbnZva2VkLCB3aHk/CgkKCglyZXR1cm4gMDsKfQ==