#include <vector>
#include <memory>
#include <iostream>
using namespace std;
struct A
{
virtual ~A()
{
cout << "A::~A()\n";
}
};
struct B: public A
{
~B()
{
cout << "B::~B()\n";
}
};
struct C: public A
{
~C()
{
cout << "C::~C()\n";
}
};
int main()
{
{
A** array=new A*[3];
array[0] = new B;
array[1] = new C;
array[2] = new A;
for(int i = 0; i < 3; ++i)
delete array[i];
delete [] array;
}
cout << "\n\n";
{
vector<unique_ptr<A>> array;
array.emplace_back(new B);
array.emplace_back(new C);
array.emplace_back(new A);
}
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBBCnsKICAgIHZpcnR1YWwgfkEoKQogICAgewogICAgICAgIGNvdXQgPDwgIkE6On5BKClcbiI7CiAgICB9Cn07CgpzdHJ1Y3QgQjogcHVibGljIEEKewogICAgfkIoKQogICAgewogICAgICAgIGNvdXQgPDwgIkI6On5CKClcbiI7CiAgICB9Cn07CgpzdHJ1Y3QgQzogcHVibGljIEEKewogICAgfkMoKQogICAgewogICAgICAgIGNvdXQgPDwgIkM6On5DKClcbiI7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIHsKICAgICAgICBBKiogYXJyYXk9bmV3IEEqWzNdOwogICAgICAgIGFycmF5WzBdID0gbmV3IEI7CiAgICAgICAgYXJyYXlbMV0gPSBuZXcgQzsKICAgICAgICBhcnJheVsyXSA9IG5ldyBBOwoKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMzsgKytpKQogICAgICAgICAgICBkZWxldGUgYXJyYXlbaV07CgogICAgICAgIGRlbGV0ZSBbXSBhcnJheTsKICAgIH0KICAgIGNvdXQgPDwgIlxuXG4iOwogICAgewogICAgICAgIHZlY3Rvcjx1bmlxdWVfcHRyPEE+PiBhcnJheTsKICAgICAgICBhcnJheS5lbXBsYWNlX2JhY2sobmV3IEIpOwogICAgICAgIGFycmF5LmVtcGxhY2VfYmFjayhuZXcgQyk7CiAgICAgICAgYXJyYXkuZW1wbGFjZV9iYWNrKG5ldyBBKTsKICAgIH0KfQoK