Object object = *(queue.dequeue());
队列是一个 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
在它的作用域结束时被安全地销毁了,但是你正在泄漏原始的、新的对象,你现在没有指向它的指针或引用。
关于c++ - 这安全吗? (qt QQueue.dequeue() c++ 内联指针取消引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330705/