很抱歉这个标题很奇怪,如果你能想到一个更好的,请随意提出。
这就是我的问题。
我有一个类似于下面这样的结构:
QObject -> MyBase -> MyDerived
然后我有一个函数,它将接受任何派生类型作为QPointer;
void function(QPointer<MyBase> base) {
...
}现在的问题是,我不能将QPointer<MyDerived>传递给这个函数,如果我使用标准指针,我就会这样做。是否必须强制转换此对象才能使其适合函数?或者我应该只使用普通的指针?
另外,有人知道分配失败的对象时的标准行为吗?你应该总是在try-block中做这件事,还是把它包装在某个东西中,以检查它是否为null?我读了Qt文档,他们说,如果分配失败,他们的大多数类都会返回空值。这句话什么时候是正确的,如果我不想使用try-catch,我该怎么办?
发布于 2012-03-16 11:55:46
你应该使用普通指针。这就是Qt文档对使用QPoiner的描述
保护指针将自动转换为T *,因此您可以自由地混合保护指针和非保护指针。这意味着如果您有一个QPointer,您可以将它传递给需要QWidget *的函数。出于这个原因,声明函数将QPointer作为参数没有什么价值;*只使用普通指针*。在存储指针时使用QPointer。
发布于 2012-03-17 17:11:15
正如@Kunal提到的,在你的情况下传递原始指针更好,但我看到你遇到了指针所有权问题。将原始指针传递给对象的方法是危险的,因为当代码库增长时,您很快就会对哪个对象是该特定指针的所有者感到困惑,这很容易导致内存泄漏。出于这个原因,我建议使用QSharedPointer而不是QPointer,甚至原始指针。QSharedPointer支持多态性,因此您可以将其(作为值)传递给任何您想要的函数/对象,而无需担心所有权问题,因为QSharedPointer将获得指针的所有权,并在QSharedPointer的所有最后一个实例超出作用域时将其删除。
https://stackoverflow.com/questions/9731516
复制相似问题