#include <iostream>
#include <vector>
#include <memory>
using namespace std;

class SandboxObject {
public:
    virtual void show() const { cout << "Unknown sandbox object " << this <<endl; }
};
class Circle : public SandboxObject {
public: 
     void show() const override { cout << "Circle " << this <<endl; }
};
class Rectangle : public SandboxObject {
public: 
     void show() const override { cout << "Rectangle " << this <<endl; }
};

int main() {
	vector<shared_ptr<SandboxObject>> universe; 
	universe.push_back(make_shared<Circle>());
	universe.push_back(make_shared<Rectangle>());
	universe.push_back(make_shared<Circle>());
	for (auto x:universe) 
		x->show(); 
	
	return 0;
}