Vectores y polimorfismo en C ++

Tengo una situación complicada. Su forma simplificada es algo como esto.

class Instruction
{
public:
    virtual void execute() {  }
};

class Add: public Instruction
{
private:
    int a;
    int b;
    int c;
public:
    Add(int x, int y, int z) {a=x;b=y;c=z;}
    void execute() { a = b + c;  }
};

Y luego en una clase hago algo como ...

void some_method()
{
    vector<Instruction> v;
    Instruction* i = new Add(1,2,3)
    v.push_back(*i);
}

Y en otra clase ...

void some_other_method()
{
    Instruction ins = v.back();
    ins.execute();
}

Y comparten este vector de instrucciones de alguna manera. Mi preocupación es la parte donde hago "ejecutar" la función. ¿Funcionará? ¿Conservará su tipo Add?

Respuestas a la pregunta(4)

Su respuesta a la pregunta