- 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/
我有一个名为 Message 的树节点类,如下所示: class Message { public: using Ptr = QSharedPointer; public: expli
与哑指针不同,我希望我可以在函数的堆栈上创建一个 QSharedPointer,然后将其作为返回值返回以分配给另一个 QSharedPointer同类型的吧?通常,这样的指针会指向现在超出范围的内存,
在 Qt 4 中我有以下数组: QSharedPointer encrypted(new unsigned char[RSA_size(publickey)]); 如何使用新的 Qt 5 create
我有QVector > DataVec作为大型面向对象项目中一个类的一个领域。程序在代码部分循环执行期间发生内存溢出,其中分配了大内存,由 QSharedPointers 控制。 在程序运行周期中,D
我已经围绕 QTextEdit 编写了一个包装器,以便像使用 QIODevice 一样使用它。我希望能够对同一个 QTextEdit 使用多个包装器,因此我可以对每个包装器使用不同的文本颜色。 为了使
关于如何使用QSharedPointer 对象作为方法参数或方法的返回值,有什么好的做法或规定吗? 按值: LMNode::setParent(QSharedPointer parent) {
我有 C# 背景,但仍在研究 C++ 和 Qt 智能指针。这应该是一个基本问题: 在myClass.h中 QSharedPointer m_flags; 在 myClass.cpp 中,我试图设置(是
我需要使用 QSharedPointer 进行引用计数,但我将在单线程应用程序中使用它,所以我不希望线程安全开销(我认为这是相当贵)。 有没有办法关闭线程安全,或者是否有一个只提供引用计数的等效 Qt
我目前有这样的东西: QSharedPointer Qsharedfoo; 现在我有一个指向 foo 的原始指针,也称为 rawfoo。我怎样才能让 foo point 拥有原始指针并开始指向它。我知
我写了一个小的示例应用程序代码如下。 #include #include #include class INav { public: virtual int getdata() = 0;
我现在有这样的东西 QSharedPointer cv; 这个共享指针用作 cV = QSharedPointer(new QMainWindow(p)); cV->setAttribute(Qt::
我在 Qt 应用程序中有一些间歇性的段错误。我认为问题与我们(错误)使用 QSharedPointer 有关。 Qt Documentation states : QSharedPointer::QS
这几天一直在尝试理解共享指针,但感觉我似乎无法理解。不确定是不是太明显了还是太复杂了。首先,谁能给我一个实际使用共享指针的例子。维基百科上的例子对我来说毫无意义。以及如何将共享指针传递给另一个函数或创
由于历史原因,我使用QSharedPointer在我的软件中。在某些时候,我们想要存储 boost::shared_ptr指向相同的数据,并且应该使 QSharedPointer 的实例保持事件状态.
我的应用程序包含几个这样的函数: void SomeClass::set_data_provider(DataProvider *data_provider) { connect(data_p
我有两个 QSharedPointer,我可以使用 operator== 来检查它们是否指向同一个对象 QSharedPointer1 == QSharedPointer2 或者我必须写 QShare
我正在使用 Qt 4.7.4(64 位)开发一个 gui proram。我已尝试按如下方式隔离问题: 我有一个窗口:class PreferencesWindow : public QMainWind
问题是,我有一个 QSharedPointer 的 QVector,我想将它们的一部分放入我的 QCache。如何插入指向 QCache 的共享指针?如果我将指针设置为缓存但销毁了 QVector 和
我是 Qt 的新手,在信号内传递 QSharedPointer 时遇到了一些问题。我正在使用两个线程(UI 和一个 worker)。工作人员使用包含自定义 QObject 的 QSharedPoint
在我的项目中,我创建了 QObject 实例并赋予它们父子关系。我还想用 QSharedPointer 实例跟踪一些对象。 当通过delete childObject; 或delete parentO
我是一名优秀的程序员,十分优秀!