我目前有一个qt形式的类,名为'foo'派生自qmainwindow。

现在在其他阶级我有这样的东西

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

现在有一个方法在SomeClass中需要知道foo *是否有效,如果指向 到有效的foo形式。我想知道实现这一点的最佳方式是什么。我应该去

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

问题是上述方法不具有可靠的有效形式。任何建议?

有帮助吗?

解决方案

我想你正在寻找智能指针。通常,此检查由弱指针完成。这不会持有对象的所有权,但它可以检查 isnull()方法

qt有一个方便的类为此,称为 qweakpointer 。它通常与共享指针配对,它将是 qsharedpointer Qt世界。

qweekpointer类对共享指针的弱引用

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

qweakpointer对象只能通过qsharedpointer的赋值来创建。

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

bool qweekpointer :: isnull()const

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

注意,由于弱引用的性质,qweakpointer引用的指针在任何时刻都会变为空,因此从此函数返回的值可以从错误到下一个调用从false更改为true。

这样,另一个类不需要通过所有权获得指针的引用,但根据您的确切用例,您可以在任何地方进行QsharedPointer。

其他提示

使用qcopedpointer或qsharedpointer,具体取决于foo类而不是foo *的范围。这将可靠地检查指针是否有效,将指针与NULL进行比较,不会有助于检测指向野生的删除指针。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top