我有一个类的实例变量,它将包含该类对象正在处理的当前对象。
class something {
base* _currentOperation;
}
该操作在完成时发出信号,这是一个我刚刚传输到当前类对象所有者的类的信号。然后我创建一个新操作并将 _currentOperation 指针分配给该操作。当您重定向指针时,是否有任何指针类型可以释放内存,或者我应该在将其分配给新对象之前调用“deleteLater()”?
例如,如果我在这里使用 QPointer,由于长期存储并且我不想要悬空指针,那么如何在其中存储派生类型?此外,谁能给我一个可以存储派生类的 QSharedPointer 示例?如何将其传递给其他函数以及何时释放?试图找到文档,但他们从未真正显示任何代码,您实际上可以如何使用它。
最佳答案
如果您不打算拥有多个指针所有者,则需要使用QScopedPointer
。 QScopedPointer
承担指针的责任,并在QScopedPointer
实例被销毁时销毁它。查看documentation获取详细信息。
创建新指针
QScopedPointer<base> _currentOperation;
如果您不提供指向构造函数的指针,则默认为0
。 _currentOperation 可以承担任何 base
类型的对象或任何 base
派生类型的责任,就像普通指针一样(不要忘记使用虚拟析构函数)。
当您想将_currentOperation
设置为新指针时,请使用
_currentOperation.reset( the_new_pointer );
重置
操作将首先销毁QScopedPointer
当前拥有的对象,然后取得the_new_pointer
的所有权。
有多种方法可以传递指针。您可以通过引用传递QScopedPointer
,或者如果您知道(尽管除非必要,否则不推荐)该对象在调用函数正在使用它时不会被删除,您可以通过调用_currentOperation来传递指针.data()
关于c++ - 如果我想在重新指向指针时释放内存,我需要什么类型的智能指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831387/