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

标签 c++ qt

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

class something {
    base* _currentOperation;
}

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

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

此外,谁能给我一个可以存储派生类的 QSharedPointer 示例?如何将其传递给其他函数以及何时释放?试图找到文档,但他们从未真正显示任何代码,您实际上可以如何使用它。

最佳答案

如果您不打算拥有多个指针所有者,则需要使用QScopedPointerQScopedPointer 承担指针的责任,并在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/

相关文章:

c++ - 更改预处理器符号的值以进行测试

C++ 在 Mac 上查找执行路径

c++ - 将旧的 Opencv 代码转换为新的 C++ API,替代 cvGetSubRect?

python - 此应用程序无法启动,因为它无法在 "xcb"中找到或加载 Qt 平台插件 ""

c++ - 当 GUI 线程在 Qt 中空闲时发出信号?

c++ - 使用 C++ 对数字进行降序排序

c++ - 从无组织的文本文件中读取整数

mysql - Qt MySQL 通过 SSL 连接到 Azure

c++ - 使用继承信号解决 Q_PROPERTY NOTIFY

c++ - 通过引用传递值到线程并修改