抱歉,标题很奇怪,如果您能想到一个更好的标题,请随时提出。

这是我的问题。

我有一个看起来像这样的结构:

QObject-> MyBase-> MyDerived

然后,我有了一个将任何派生类型用作QPointer的函数。

void function(QPointer<MyBase> base) {
   ...
}

现在的问题是,我无法将QPointer<MyDerived>传递到此函数中,如果我使用标准指针,则该传递给我。我是否必须强制转换此对象以使其适合功能?还是应该只使用普通的指针?

另外,在分配失败的对象时,有人知道标准行为吗?您应该始终在try块中执行此操作还是将其包装在某些内容中以检查其是否为null?我阅读了Qt文档,他们说,如果分配失败,大多数类将返回空值。该语句何时是正确的,如果我不想使用try-catch怎么办?

最佳答案

您应该使用普通的指针。这就是Qt Document关于使用QPoiner的内容

“ protected 指针将自动转换为T *,因此您可以自由地混合 protected 和不 protected 指针。这意味着,如果您有QPointer ,则可以将其传递给需要QWidget *的函数。为此因此,声明以QPointer作为参数的函数几乎没有值(value); *仅使用普通指针*。随着时间的过去存储指针时,请使用QPointer。

关于c++ - 包含派生对象的QPointer不会与基类匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9731516/

10-11 22:51