#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);
    }
}

