具有对象指针的对象矢量



快速提问伙计们,我有以下问题:

我的代码中有一个对象(结构(指针,当我修改某些内容时,为了跟踪其历史记录,我将其保存在对象的向量(堆栈(中。所以我正在努力。

{
   Object* myObject;
   vector<Object> stack;

   stuffHappensInObject(*myObject);
   stack.push_back(myObject);
   if(IclickLoadLast){
    myObject = stack.at(size-1);
   }
}

我在push_back调用时遇到问题,我不知道是否可以将新对象中的所有结构变量放入堆栈中。我该怎么做?

首先不要使用指针,这里不需要。该问题是由于您尝试向Object向量添加Object*引起的(更不用说取消引用未初始化的指针时指向 UB land的快速票证(。这是固定代码:

{
    Object myObject;
    std::vector<Object> stack;

    stuffHappensInObject(myObject);
    stack.push_back(myObject);
    if(IclickLoadLast){
        myObject = stack.at(stack.size() - 1);
    }
}

我还size更改为stack.size(),这是一种您可以使用的有效std::vector方法。另外,看看std::stack它提供了更多类似堆栈的操作:

{
    Object myObject;
    std::stack stack;

    stuffHappensInObject(myObject);
    stack.push(myObject);
    if(IclickLoadLast){
        myObject = stack.top();
    }
}

在这两种情况下,如果您使用的是C++11,我建议您使用std::vector::emplace_backstd::stack::emplace而不是push_backpush

几个问题:

这将不起作用:

stack.push_back(myObject);

因为myObject具有Object*类型,而堆栈采用类型为Object的对象。请注意类型上的细微差异。我不确定你为什么甚至使用指针(没有足够的上下文(。

但还有一个主要问题:
在这里,您可以取消引用未初始化的指针。结果是未定义的行为

Object* myObject;                  // No value defined (so it is random)
stuffHappensInObject(*myObject);   // De-referencing (the *) on an uninitialized pointer.

相关内容

  • 没有找到相关文章

最新更新