对不起,如果我重复一个问题,但我找不到相同的问题。 从标准队列中提取元素的正确操作是什么?
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?
答案 0 :(得分:1)
"我有一个带有动态内存和复制构造函数的类T,...... 如何强制复制构建?"
那很简单
T rout(Queue.front());
很可能你错过了为T
提供正确的赋值运算符。另请参见此处What is the Rule of Three?
另外,当您在班级T
中完成动态内存管理时。请放心使用,并使用standard container classes,甚至是c ++的标准dynamic memory management功能,最好直接使用new
和delete
。
答案 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()));