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

I cannot see a way to take an element from std::queue

本文关键字:获取 元素 方法 queue 看不到 std 我看      更新时间:2023-10-16

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

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()复制构造函数不自动调用。
析构函数在范围结束时释放内存,我有垃圾实体。

如何强制复制结构?

您的问题是没有复制赋值运算符吗?您提到了复制构造函数,但您没有在代码中复制构造任何内容。也许你打算这样做:

T Pop ()
{ 
    assert(!Queue.empty());
    EnterCriticalSection (pCSection);
    T rout = Queue.front ();
    Queue.pop ();
    LeaveCriticalSection (pCSection);
    return rout;
}

甚至:

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

"我有一个带有动态内存和复制构造函数的 T 类,...我怎样才能强制复制?

这很容易

T rout(Queue.front());

很可能您一直缺少为T提供适当的分配运算符。另请参阅此处 什么是三法则?


此外,正如您提到在类T中完成的动态内存管理。请放松一下,使用标准容器类,甚至是 c++ 的标准动态内存管理功能,最好直接使用 newdelete