如何知道Qt表格是否有效

时间:2014-01-10 21:53:16

标签: c++ qt qmainwindow qtcore

我目前有一个名为`foo'的Qt表单类派生自QMainWindow。

现在在其他课程中我有类似的东西

class someclass
{
   private:
      foo* form;
   ......
   public:
      someclass()
      {
          form = NULL; 
      }    
};

现在someclass中有一个方法需要知道foo *是否有效,如果它指向的话 到一个有效的foo表格。我想知道实现这一目标的最佳方法是什么。我应该

if(form!=NULL) {...}

问题是上述方法无法保证可靠的有效表格。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用QScopedPointer或QSharedPointer,具体取决于foo类的范围而不是foo *。这样可以可靠地检查指针是否有效,将指针与null进行比较是否有助于检测指向野外的已删除指针。

答案 1 :(得分:1)

我认为你正在寻找智能指针。通常,此检查由弱指针完成。这不会保留对象的所有权,但可以使用isNull() method检查有效性。

Qt为此建立了一个方便的类,称为QWeakPointer。它通常与共享指针配对使用,在Qt世界中它将是QSharedPointer

  

QWeakPointer类包含对共享指针的弱引用

     

QWeakPointer是对C ++中指针的自动弱引用。它不能用于直接取消引用指针,但它可用于验证指针是否已在另一个上下文中被删除。

     

QWeakPointer对象只能通过QSharedPointer的赋值创建。

以下是您可以实际使用的方法,以查看拥有该对象的主QSharedPointer是否已删除引用的指针。

  

bool QWeakPointer :: isNull()const

     

如果此对象持有对空指针的引用,则返回true。

     

请注意,由于弱引用的性质,QWeakPointer引用的指针随时可以变为null,因此从一次调用到下一次调用时,此函数返回的值可以从false变为true。

这样,另一个类不需要获得对具有所有权的指针的引用,但是根据您的确切用例,您可以在任何地方使用QSharedPointer。