C++ 将包含指针的数据插入向量

C++ 将包含指针的数据插入向量,c++,pointers,vector,stl,C++,Pointers,Vector,Stl,我有以下课程: class Op { private: std::vector<std::string> m_operands; std::string m_op; public: Op(std::string op = "") : m_op(op){} std::string GenCode(); void AddOperand(std::string& operand)

我有以下课程:

class Op
    {
    private:
        std::vector<std::string> m_operands;
        std::string m_op;
    public:
        Op(std::string op = "") : m_op(op){}
        std::string GenCode();
        void AddOperand(std::string& operand) ;
        std::vector<std::string> GetOperands() const { return m_operands; }
        std::string GetOp() const { return m_op; }
    };
此外,我还定义了:

typedef std::pair<std::string,Op*> Assignment;
std::vector<Assignment> m_proceduralAssign;
以下场景产生了一个问题:

1.Op* op1 = AddMovOp();
2.op1->AddOperand("operand1");
3.AddAssign(op,"1");
4.Op* op2 = AddMovOp();
在执行步骤4之后
m_movOpV
使用新的
Op
正确更新。但是
m_proceduralAssign
有一个垃圾数据:已经存在于
m_proceduralAssign
中的
Assignment
变为具有空的m_操作数和指向
m_Op
的错误指针。 并且没有添加新的
作业
(我试图添加)


你能告诉我问题发生在哪里?如何解决吗?

你应该重新审视你的设计。我现在在代码中看到的一个大问题是,指向向量对象的引用和指针经常失效(在push_-back和其他操作期间),因此返回指向新插入项的指针就是自找麻烦。如果我是你,我会考虑保存索引

void AddAssignment(ModuleVCodeGen::Op* op,const std::string& lExp)
{
    Assignment assignment = (Assignment)std::make_pair(lExp,op);
    m_proceduralAssign.push_back(assignment);
}
1.Op* op1 = AddMovOp();
2.op1->AddOperand("operand1");
3.AddAssign(op,"1");
4.Op* op2 = AddMovOp();