[英]Inserting the data ,containing a pointer, to vector
我有以下课程:
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; }
};
该类的实例保存到std::vector<Op> m_movOpV
; 即以下方法添加了一个新的操作:
Op* AddMovOp()
{
Op op("MovOp");
m_movOpV.push_back(op);
return &m_movOpV.back();
}
另外我定义了:
typedef std::pair<std::string,Op*> Assignment;
std::vector<Assignment> m_proceduralAssign;
因此,在添加Op之后,我可以使用以下函数生成一个Assignment
:
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();
执行步骤4后m_movOpV
与新正确更新Op
。但m_proceduralAssign
有垃圾数据:该Assignment
已存在于m_proceduralAssign
变成具有空m_operands坏指针m_op
。 并没有添加新的Assignment
(我尝试添加)。
请问问题发生在哪里,如何解决?
您应该重新设计。 我现在在您的代码中看到的一个大问题是,矢量对象的引用和指针经常会失效(在push_backs和其他操作期间),因此,通过返回指向新插入的项的指针,您会遇到麻烦。 如果您是我,那么我会考虑保存索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.