use shared_ptr for the set of source/target operands in each instruction.