#include <iostream>
#include <memory>
#include <vector>
using namespace std;
struct Move { virtual void show() { cout <<"Move"<<endl; } };
struct CaptureMove : Move { void show() override { cout <<"CaputreMove"<<endl; } };
int main() {
// Solution 1 : raw pointers : danger
vector<Move*> mp;
mp.push_back (new Move); // attention, you have to delete it ofr memory will leak
mp.push_back (new CaptureMove);
for (x:mp) { // you have to take care of deletion, but are you sure the vector
delete x; // was not copied and pointers are still needed somewhere else ?
}
// Solution 2 : smart pointers <= recommended !
vector<shared_ptr<Move>> m;
m.push_back(make_shared<Move>());
m.push_back(make_shared<CaptureMove>());
m.push_back(make_shared<Move>());
for (auto x:m)
x->show();
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE1vdmUgeyB2aXJ0dWFsIHZvaWQgc2hvdygpIHsgY291dCA8PCJNb3ZlIjw8ZW5kbDsgfSB9OwpzdHJ1Y3QgQ2FwdHVyZU1vdmUgOiBNb3ZlIHsgdm9pZCBzaG93KCkgb3ZlcnJpZGUgeyBjb3V0IDw8IkNhcHV0cmVNb3ZlIjw8ZW5kbDsgfSB9OwoKaW50IG1haW4oKSB7CgkKCS8vIFNvbHV0aW9uIDEgOiByYXcgcG9pbnRlcnMgOiBkYW5nZXIKCXZlY3RvcjxNb3ZlKj4gbXA7IAoJbXAucHVzaF9iYWNrIChuZXcgTW92ZSk7ICAgICAvLyBhdHRlbnRpb24sIHlvdSBoYXZlIHRvIGRlbGV0ZSBpdCBvZnIgbWVtb3J5IHdpbGwgbGVhawoJbXAucHVzaF9iYWNrIChuZXcgQ2FwdHVyZU1vdmUpOwoJZm9yICh4Om1wKSB7ICAgICAgICAgICAgICAgIC8vIHlvdSBoYXZlIHRvIHRha2UgY2FyZSBvZiBkZWxldGlvbiwgYnV0IGFyZSB5b3Ugc3VyZSB0aGUgdmVjdG9yIAoJCWRlbGV0ZSB4OyAgICAgICAgICAgICAgIC8vIHdhcyBub3QgY29waWVkIGFuZCBwb2ludGVycyBhcmUgc3RpbGwgbmVlZGVkIHNvbWV3aGVyZSBlbHNlID8gCgl9CgkKCS8vIFNvbHV0aW9uIDIgOiBzbWFydCBwb2ludGVycyA8PSByZWNvbW1lbmRlZCAhIAoJdmVjdG9yPHNoYXJlZF9wdHI8TW92ZT4+IG07IAoJbS5wdXNoX2JhY2sobWFrZV9zaGFyZWQ8TW92ZT4oKSk7CgltLnB1c2hfYmFjayhtYWtlX3NoYXJlZDxDYXB0dXJlTW92ZT4oKSk7CgltLnB1c2hfYmFjayhtYWtlX3NoYXJlZDxNb3ZlPigpKTsKCQogICAgZm9yIChhdXRvIHg6bSkgCiAgICAgICAgeC0+c2hvdygpOyAKCQoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=