我有一个类的实例变量,它将包含该类对象正在处理的当前对象。
class something {
base* _currentOperation;
}
该操作在完成时发出信号,这是我刚刚转移到当前类对象所有者的类的信号。然后我创建一个新操作并将_currentOperation指针指向该操作。是否有任何指针类型在重定向指针时释放内存,或者我应该在将其分配给新对象之前调用“deleteLater()”?
如果我在这里使用QPointer,例如,由于长期存储并且我不想要使用危险指针,我如何在其中存储派生类型?
另外,有人可以给我一个QSharedPointer的例子,你可以存储Derived类吗?我如何将其传递给其他功能以及何时将其发布?试图找到doc,但他们从未真正展示过你实际可以使用它的任何代码。
答案 0 :(得分:1)
重置智能指针通常会在重置(指向其他内容)时释放资源(内存)。否则他们就不会很聪明!
答案 1 :(得分:1)
我认为你所追求的是QScopedPointer。我的answer to this question也可以帮到你。
答案 2 :(得分:1)
如果您不想拥有指针的多个所有者,请使用QScopedPointer
。 QScopedPointer
承担指针的责任,并在QScopedPointer
实例被销毁时销毁它。查看documentation了解详细信息。
创建新指针
QScopedPointer<base> _currentOperation;
如果您没有提供指向构造函数的指针,则默认为0
。 _currentOperation可以对base
类型的任何对象或任何派生类型的base
负责,就像普通指针一样(不要忘记使用虚拟析构函数)。
如果要将_currentOperation
设置为新指针,请使用
_currentOperation.reset( the_new_pointer );
reset
操作将首先销毁当前拥有的对象QScopedPointer
,然后取得the_new_pointer
的所有权。
有几种方法可以传递指针。您可以通过引用传递QScopedPointer
,或者如果您知道(尽管不推荐,除非必要),在调用函数使用它时不会删除该对象,您可以通过调用_currentOperation.data()
传递指针