【发布时间】:2011-11-30 18:05:28
【问题描述】:
Object object = *(queue.dequeue());
queue 是一个 QQueue
【问题讨论】:
Object object = *(queue.dequeue());
queue 是一个 QQueue
【问题讨论】:
它本身并不是立即不安全,但你可能会错误地使用它。
您的代码所做的只是对queue 的最后一个元素所指向的元素进行复制。通过使元素出队,您会丢失指向它的指针,并且您现在无法释放该原始对象以防它是动态构造的。
正确示例(没有动态对象,没有泄漏):
QQueue<Foo*> q;
{
Foo a;
q.enqueue(&a);
Foo b = *q.dequeue();
}
破例(动态对象泄露):
QQueue<Foo*> q;
q.enqueue(new Foo); // eeew, naked "new" in C++...
Foo c = *q.dequeue();
// now the newed element is leaked
你是对的,c 在其作用域的末尾被安全地销毁,但是你正在泄漏原始的、新的对象,你现在没有指针或引用。
【讨论】: