【问题标题】:Inserting the data ,containing a pointer, to vector将包含指针的数据插入向量
【发布时间】:2013-07-21 15:50:11
【问题描述】:

我有以下课程:

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&lt;Op&gt; m_movOpV; IE。以下方法添加了一个新的操作:

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_operands 和指向错误的指针m_op。 并且没有添加新的Assignment(我尝试添加)。

您能否告知问题发生在哪里?以及如何解决?

【问题讨论】:

    标签: c++ pointers vector stl


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-28
      • 2015-12-05
      • 2021-08-09
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多