https://stackoverflow.com/questions/16126578/vectors-and-polymorphism-in-c
↑によれば、やっぱり、>>561>>562 のようなやり方は間違いで、
std::vector<T> の T は、Bookではなく、shared_ptr<Book> のようなものを入れるべきで、
以下の様になっている。だから、>>561>>562 は間違いだよね?
class Instruction {・・・};
class Add: public Instruction{・・・};

typedef shared_ptr<Instruction> PInstruction;
vector<PInstruction> v;
v.emplace_back(make_shared<Add>());