首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含派生对象的QPointer与基类不匹配

包含派生对象的QPointer与基类不匹配
EN

Stack Overflow用户
提问于 2012-03-16 11:39:23
回答 2查看 1.2K关注 0票数 1

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

这就是我的问题。

我有一个类似于下面这样的结构:

QObject -> MyBase -> MyDerived

然后我有一个函数,它将接受任何派生类型作为QPointer;

代码语言:javascript
复制
void function(QPointer<MyBase> base) {
   ...
}

现在的问题是,我不能将QPointer<MyDerived>传递给这个函数,如果我使用标准指针,我就会这样做。是否必须强制转换此对象才能使其适合函数?或者我应该只使用普通的指针?

另外,有人知道分配失败的对象时的标准行为吗?你应该总是在try-block中做这件事,还是把它包装在某个东西中,以检查它是否为null?我读了Qt文档,他们说,如果分配失败,他们的大多数类都会返回空值。这句话什么时候是正确的,如果我不想使用try-catch,我该怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-16 11:55:46

你应该使用普通指针。这就是Qt文档对使用QPoiner的描述

保护指针将自动转换为T *,因此您可以自由地混合保护指针和非保护指针。这意味着如果您有一个QPointer,您可以将它传递给需要QWidget *的函数。出于这个原因,声明函数将QPointer作为参数没有什么价值;*只使用普通指针*。在存储指针时使用QPointer。

票数 7
EN

Stack Overflow用户

发布于 2012-03-17 17:11:15

正如@Kunal提到的,在你的情况下传递原始指针更好,但我看到你遇到了指针所有权问题。将原始指针传递给对象的方法是危险的,因为当代码库增长时,您很快就会对哪个对象是该特定指针的所有者感到困惑,这很容易导致内存泄漏。出于这个原因,我建议使用QSharedPointer而不是QPointer,甚至原始指针。QSharedPointer支持多态性,因此您可以将其(作为值)传递给任何您想要的函数/对象,而无需担心所有权问题,因为QSharedPointer将获得指针的所有权,并在QSharedPointer的所有最后一个实例超出作用域时将其删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9731516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档