这样安全吗? (qt QQueue.dequeue()c ++内联指针取消引用)

时间:2011-11-30 18:05:28

标签: c++ qt pointers queue

Object object = *(queue.dequeue());

队列是QQueue< Object *>。我担心在我取消引用它之前删除了出列指针。当然我可以访问object的数据,但这并不意味着什么。像这样在一行中完成所有操作很方便(我不想要指针,因为我希望object在超出范围时自动删除)但是如果它不安全则我不能这样做。请指教。感谢。

1 个答案:

答案 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在其范围的末尾被安全地销毁,但你正在泄漏原始的新对象,你现在没有指针或引用。