我看不到从std :: queue获取元素的方法

时间:2014-11-22 21:57:35

标签: c++ stl queue

对不起,如果我重复一个问题,但我找不到相同的问题。 从标准队列中提取元素的正确操作是什么?

T Pop ()
{ T rout;

  EnterCriticalSection (pCSection);
  rout = Queue.front (); // here the link is returned
  Queue.pop ();          // here destructor is called
  LeaveCriticalSection (pCSection);

  return rout; // -->> there everything falls
}

我有一个带有动态内存管理和复制构造函数的类T,在front()行中,不会自动调用复制构造函数。
析构函数释放了作用域末尾的内存,并且我有垃圾实体。

如何强制复制constr?

2 个答案:

答案 0 :(得分:1)

  

"我有一个带有动态内存和复制构造函数的类T,...... 如何强制复制构建?"

那很简单

T rout(Queue.front());

很可能你错过了为T提供正确的赋值运算符。另请参见此处What is the Rule of Three?


另外,当您在班级T中完成动态内存管理时。请放心使用,并使用standard container classes,甚至是c ++的标准dynamic memory management功能,最好直接使用newdelete

答案 1 :(得分:1)

您的问题是您没有复制分配操作符吗?你提到了复制构造函数,但你不是在代码中复制构造任何东西。也许你打算这样做:

T Pop ()
{ 
    assert(!Queue.empty());

    EnterCriticalSection (pCSection);
    T rout = Queue.front ();
    Queue.pop ();
    LeaveCriticalSection (pCSection);

    return rout;
}

甚至:

    T rout(std::move(Queue.front()));