#include <iostream>
#include <string>
#include <vector>
#include <memory>
 
class MyAbstract
{
    public:
 
    virtual void doStuff() = 0;
    virtual ~MyAbstract() {}
    
    int id;
};
 
class MyConcrete : public MyAbstract
{
	public:
	MyConcrete(int id){this->id=id;}
	void doStuff() { }
	
};
 
int main()
{
    std::vector<std::unique_ptr<MyAbstract>> myList;
    
    myList.emplace_back(std::make_unique<MyConcrete>(1));
    myList.emplace_back(std::make_unique<MyConcrete>(2));
    myList.emplace_back(std::make_unique<MyConcrete>(3));
 
    for(auto & item : myList)
    {
        std::cout << item->id << "\n";
    }
    
    //Now delete one by 
	for (auto it = myList.begin(); it != myList.end();)
	{
		if ((*it)->id == 2)
		{
			it = myList.erase(it);
			break;
		}
		else
			++it;
	}
	
	std::cout << "After deletion:" << std::endl;
	
    for(auto & item : myList)
    {
        std::cout << item->id << "\n";
    }
}