- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我遇到这样一种情况,QSharedPointer
托管对象发出信号表示它已完成其目的并准备好很快删除(在执行后离开函数发出我的 readyForDeletion
信号) .当使用普通 指针时,我只是在对象上调用QObject::deleteLater
,但是这对于QSharedPointer
是不可能的-托管实例。我的解决方法如下:
template<typename T>
class QSharedPointerContainer : public QObject
{
QSharedPointer<T> m_pSharedObj;
public:
QSharedPointerContainer(QSharedPointer<T> pSharedObj)
: m_pSharedObj(pSharedObj)
{} // ==> ctor
}; // ==> QSharedPointerContainer
template<typename T>
void deleteSharedPointerLater(QSharedPointer<T> pSharedObj)
{
(new QSharedPointerContainer<T>(pSharedObj))->deleteLater();
} // ==> deleteSharedPointerLater
这很好用,但是使用这种方法(分配一个新的 QObject
等等)有很多开销。有没有更好的解决方案来处理这种情况?
最佳答案
您可以使用QSharedPointer
constructor使用 Deleter
:
The deleter parameter specifies the custom deleter for this object. The custom deleter is called, instead of the operator delete(), when the strong reference count drops to 0. This is useful, for instance, for calling deleteLater() on a QObject instead:
QSharedPointer<MyObject> obj =
QSharedPointer<MyObject>(new MyObject, &QObject::deleteLater);
关于c++ - QSharedPointer 和 QObject::deleteLater,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623690/
我正在考虑编写这段代码: emit finished(); deleteLater(); 但这让我想知道 finished() 是否总是在对象被删除之前交付。我很确定它将为 Qt::DirectCon
这个问题在这里已经有了答案: How delete and deleteLater works with regards to signals and slots in Qt? (4 个答案) 关闭
Qt deleteLater作用及源码分析 个人经验总结,如有错误或遗漏,欢迎各位大佬指正 🥳 在本篇文章中,我们将深入分析源码,探讨 deleteLater 的原理。
我有一个布局,我添加了很多自定义小部件,例如 layout.addWidget(widget) .稍后我想删除所有这些自定义小部件并添加新小部件。当谈到 deleteLater 时,我对执行此操作的最
这个问题在这里已经有了答案: QObject::deleteLater across a QThread (3 个答案) 关闭 3 年前。 是否可以执行以下操作? worker->moveToThr
Qt 表示 deleteLater 在事件循环返回后被调用。所以,如果我有以下代码: Waypoint* wp = new Waypoint(); WaypointWidget* wp_widge
准系统示例: Object * o = new Object(); //let's call this one object A on heap o->deleteLater(); o = new O
我有一个用 C++ 和 Qt 编写的应用程序,它执行大量网络请求。我的代码的基本大纲如下: { QNetworkReply* reply = networkAccessManager().ge
我正在寻找一种解决方案来安排跨线程删除对象。关于 deleteLater 行为方式的文档并不完全清楚。我可以在不是对象所有者的线程中调用此函数吗? 例如,对象 X 由线程 A 拥有,而在线程 B 中我
我遇到这样一种情况,QSharedPointer 托管对象发出信号表示它已完成其目的并准备好很快删除(在执行后离开函数发出我的 readyForDeletion 信号) .当使用普通 指针时,我只是在
所以我有一个函数可以发出网络请求: void MyClass::makeRequest() { ApiRequest* apiRequest = new ApiRequest(); a
既然Python中已经有了垃圾收集器,那么在PyQt/PySide中还需要deleteLater()吗? 最佳答案 这取决于你所说的“必要”是什么意思。 如果(例如)在关闭小部件时不小心,应用程序可能
通常,当我删除一个对象时,我会将其设置为零。这有助于我编写例程来检查对象不为零,然后继续。 但是,如果我使用 deleteLater() 函数,我将失去对它的控制。我不知道它是否是一个有效的项目,或者
虽然我通过 PyQt 从 Python 使用 Qt,这个问题同样适用于纯 Qt,只是语法有点不同,问题是一样的: 当我们想要在场景中处理 QGraphicsItem 对象时,我们调用 scene.re
我想了解使用 sip.delete() 删除小部件(包括它的布局和此布局中的子项)有什么区别和 deleteLater() .我知道removeWidget()和 setParent(None)只是从
我希望我的 std::unique_ptr 调用 QObject::deleteLater 来破坏该对象。 我不知道该怎么做。 我尝试过的任何方法都无法编译。 例如 std::unique_ptr v
我尝试使用 QTcpSserver,它会一次与一个且仅一个客户端保持连接,直到客户端断开连接。所以,我在我的类中保留了一个成员指针。 问题就出在这里:我在网上看到的例子,在disconnected()
我正在测试一个共享库,其中包含内部对 deleteLater 的调用。库中没有运行事件循环,因此应用程序需要运行事件循环,以便正确释放所有内存。 但是在测试中,对象dtor并没有像预期的那样被调用。
发件人:http://doc.qt.io/qt-5/qthread.html#details From Qt 4.8 onwards, it is possible to de
请考虑下面的最小示例,它实现了一个自定义 QNetworkAccessManager,它维护一个未完成的 QNetworkReply 实例列表。 当回复完成时,它会从unfinished_replie
我是一名优秀的程序员,十分优秀!