题
我目前有一个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进行比较,不会有助于检测指向野生的删除指针。
不隶属于 StackOverflow