我目前有一个名为`foo'的Qt表单类派生自QMainWindow。
现在在其他课程中我有类似的东西
class someclass
{
private:
foo* form;
......
public:
someclass()
{
form = NULL;
}
};
现在someclass中有一个方法需要知道foo *是否有效,如果它指向的话 到一个有效的foo表格。我想知道实现这一目标的最佳方法是什么。我应该
if(form!=NULL) {...}
问题是上述方法无法保证可靠的有效表格。有什么建议吗?
答案 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。