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

What smart pointer type do I need if I want to release the memory when re-pointing the pointer?

本文关键字:指针 什么 类型 智能 内存 新指 如果 释放      更新时间:2023-10-16

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

class something {
    base* _currentOperation;
}

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

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

另外,有人能给我一个可以存储派生类的QSharedPointer的例子吗?我该如何将其传递给其他函数,何时才能真正实现?试图找到doc,但他们从未真正向任何代码展示如何使用它。

如果指针没有多个所有者,则需要使用QScopedPointerQScopedPointer承担指针的责任,并将在QScopedPointer实例被销毁时销毁指针。查看文档以了解详细信息。

创建新的指针


    QScopedPointer<base> _currentOperation;

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

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


    _currentOperation.reset( the_new_pointer );

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

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

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

我想你想要的是QScopedPointer。我对这个问题的回答也可能对你有所帮助。

相关文章: