Object object = *(queue.dequeue());
队列是QQueue< Object *>。我担心在我取消引用它之前删除了出列指针。当然我可以访问object
的数据,但这并不意味着什么。像这样在一行中完成所有操作很方便(我不想要指针,因为我希望object
在超出范围时自动删除)但是如果它不安全则我不能这样做。请指教。感谢。
答案 0 :(得分:3)
它本身并不是不安全,但你很可能使用它。
您的所有代码都会对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
在其范围的末尾被安全地销毁,但你正在泄漏原始的新对象,你现在没有指针或引用。