QScopedPointer vs parent

时间:2018-03-01 20:27:29

标签: qt qscopedpointer

我需要对下一个情况做一些解释。假设我们有下一个代码:

telnet localhost 135

我无法理解将父对象传递给QScopedPointer是否安全。当父对象和智能指针两次删除对象时,是否会出现任何情况,这会导致崩溃?

1 个答案:

答案 0 :(得分:0)

这是完全安全的。以下是MyClass实例被销毁时发生的情况:

  1. MyClass' s析构函数被调用(在您的示例中没有任何作用)
  2. MyClass的所有成员变量都被破坏了。在您的情况下,QScopedPointer的析构函数被调用,这意味着删除了子QObject。如果QObject被销毁,则为removed from its parent's list of children,因此家长不再尝试删除此QObject
  3. QObject您的MyClass实例的析构函数被调用,它看不到要删除的子项
  4. 如果没有理由动态分配,您可能还需要考虑按值保留您的子成员QObject