如果我想在重新指向指针时释放内存,我需要什么智能指针类型
What smart pointer type do I need if I want to release the memory when re-pointing the pointer?
我有一个类的实例变量,它将包含该类对象正在处理的当前对象。
class something {
base* _currentOperation;
}
操作完成时发出信号,我只是将信号传递给当前类对象的所有者类。然后我创建一个新的操作,并将_currentOperation指针分配给该操作。当重定向指针时,是否有任何指针类型可以释放内存,或者在将其分配给新对象之前,我应该只调用"deleteLater()"吗?
例如,如果我在这里使用QPointer,由于长期存储,并且我不想要危险的指针,我如何在其中存储派生类型?
另外,有人能给我一个可以存储派生类的QSharedPointer的例子吗?我该如何将其传递给其他函数,何时才能真正实现?试图找到doc,但他们从未真正向任何代码展示如何使用它。
如果指针没有多个所有者,则需要使用QScopedPointer
。QScopedPointer
承担指针的责任,并将在QScopedPointer
实例被销毁时销毁指针。查看文档以了解详细信息。
创建新的指针
QScopedPointer<base> _currentOperation;
如果不提供指向构造函数的指针,则默认为0
_currentOperation可以像普通指针一样负责base
类型的任何对象或base
的任何派生类型(不要忘记使用虚拟析构函数)。
如果要将_currentOperation
设置为新指针,请使用
_currentOperation.reset( the_new_pointer );
reset
操作将首先销毁QScopedPointer
当前拥有的对象,然后取得the_new_pointer
的所有权。
有几种方法可以绕过指针。您可以通过引用传递QScopedPointer
,或者如果您知道(除非必要,否则不推荐使用)调用函数使用对象时不会删除对象,您可以通过调用_currentOperation.data()
来传递指针
可重置的智能指针通常在重置(指向其他对象)时释放资源(内存)。否则他们就不会很聪明!
我想你想要的是QScopedPointer。我对这个问题的回答也可能对你有所帮助。
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 将指针分配给另一个指针时会发生什么情况?
- 当该数组的索引中没有元素时,指针指向什么?
- C++:Lambda 函数指针转换的用例是什么?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 如果我在 const 函数上使用指针,我可以返回什么?
- 为什么此指针值不能转换为整数的规则是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 以下与指针相关的代码的输出是什么?
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- C++中的指针.什么类型的对象