将包含指针的数据插入到矢量
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
有一个垃圾数据:m_proceduralAssign
中已经存在的Assignment
变成了空的m_operations和指向m_op
的坏指针。并且没有添加新的Assignment
(我试图添加它)。
你能告诉我问题出在哪里吗?如何解决?
您应该重新审视您的设计。我现在在代码中看到的一个大问题是,指向向量对象的引用和指针经常无效(在push_backs和其他操作中),所以通过返回指向新插入项的指针,你就麻烦了。如果我是你,我会考虑保存索引。
相关文章:
- 在 QAbstractTableModel 上的 setModel 之后插入数据
- 如果我们不创建一个新节点并使用指针插入数据并建立链接(在链表中)怎么办?
- 增强循环缓冲区push_back在前面插入数据
- 程序 使用链表插入数据时停止工作
- 如何与LIBPQXX API同时插入数据?(PostgreSQL,线程)
- 如何在其中创建2D字符串向量并插入数据
- 二叉搜索树插入数据问题
- 通过指定第 n 个节点位置在单链接列表中插入数据
- 默认情况下构造函数插入数据后,我没有得到任何输出,但我不确定为什么不
- 在std::映射中插入数据
- 插入数据时出现分段错误
- 如何在C++的排序文件中插入数据
- 在二进制树中插入数据时出错
- 在双通道矩阵中插入数据
- 用于插入数据而非搜索的最快数据结构
- 无法在映射的映射的STL映射中插入数据
- 如何插入数据到sqlite使用qt
- 为什么在c++中,在矢量结束后插入数据是错误的
- 在没有c++方法的类中插入数据
- 在矢量中插入数据时多次调用复制构造函数