如果我想在重新指向指针时释放内存,我需要什么智能指针类型?

时间:2012-03-22 22:18:31

标签: c++ qt

我有一个类的实例变量,它将包含该类对象正在处理的当前对象。

class something {
    base* _currentOperation;
}

该操作在完成时发出信号,这是我刚刚转移到当前类对象所有者的类的信号。然后我创建一个新操作并将_currentOperation指针指向该操作。是否有任何指针类型在重定向指针时释放内存,或者我应该在将其分配给新对象之前调用“deleteLater()”?

如果我在这里使用QPointer,例如,由于长期存储并且我不想要使用危险指针,我如何在其中存储派生类型?

另外,有人可以给我一个QSharedPointer的例子,你可以存储Derived类吗?我如何将其传递给其他功能以及何时将其发布?试图找到doc,但他们从未真正展示过你实际可以使用它的任何代码。

3 个答案:

答案 0 :(得分:1)

重置智能指针通常会在重置(指向其他内容)时释放资源(内存)。否则他们就不会很聪明!

答案 1 :(得分:1)

我认为你所追求的是QScopedPointer。我的answer to this question也可以帮到你。

答案 2 :(得分:1)

如果您不想拥有指针的多个所有者,请使用QScopedPointerQScopedPointer承担指针的责任,并在QScopedPointer实例被销毁时销毁它。查看documentation了解详细信息。

创建新指针



    QScopedPointer<base> _currentOperation;

如果您没有提供指向构造函数的指针,则默认为0。 _currentOperation可以对base类型的任何对象或任何派生类型的base负责,就像普通指针一样(不要忘记使用虚拟析构函数)。

如果要将_currentOperation设置为新指针,请使用



    _currentOperation.reset( the_new_pointer );

reset操作将首先销毁当前拥有的对象QScopedPointer,然后取得the_new_pointer的所有权。

有几种方法可以传递指针。您可以通过引用传递QScopedPointer,或者如果您知道(尽管不推荐,除非必要),在调用函数使用它时不会删除该对象,您可以通过调用_currentOperation.data()传递指针