C++ 我可以使用C++;使用Q定时器和信号优化对象创建?
我想实现这一点:使用一个特定的对象,它将被创建多次,并且需要尽可能快。然而,在我的对象中,我有一个带有连接插槽的qtimer,它在构造函数之后才启动 我的问题是,这种方法是否仍然适用于QTimer()及其各自的信号和插槽?还是仅限于不实例化其他对象的对象 这是一个优化示例:C++ 我可以使用C++;使用Q定时器和信号优化对象创建?,c++,qt,optimization,C++,Qt,Optimization,我想实现这一点:使用一个特定的对象,它将被创建多次,并且需要尽可能快。然而,在我的对象中,我有一个带有连接插槽的qtimer,它在构造函数之后才启动 我的问题是,这种方法是否仍然适用于QTimer()及其各自的信号和插槽?还是仅限于不实例化其他对象的对象 这是一个优化示例: template <int def,int real> struct check_d_size : ::static_assert::is_fail<(bool)(def == real)> {};
template <int def,int real>
struct check_d_size : ::static_assert::is_fail<(bool)(def == real)> {};
class StackObj {
public:
StackObj() {
check_d_size<d_size,sizeof(Private)>();
d = new(d_bytes) Private;
}
virtual ~StackObj() { d->~Private(); }
private:
class Private {
public:
inline void * operator new(size_t, quint8 * mem) { return mem; }
int i;
int j;
DynObj * p;
std::string str;
class Check {
public: Check() { static bool b=true; if (b) { qDebug() << "ok new stack"; b = !b; } }
~Check() { static bool b=true; if (b) { qDebug() << "ok del stack"; b = !b; } }
} chk;
};
Private * d;
static const int d_size = 32;
quint8 d_bytes[d_size];
};
当您对私有类进行内存分配时,就会发生优化。 无论您在哪里分配它,它都会更快,因为它是在堆栈上而不是在堆上分配的
假设
PenPathDetails
是您的私有类,则它的分配会更快,类的ctor中的QTimer内容的分配将保持不变,除非您也在堆栈上分配QTimer,也就是说,QTimer m_AutoJoinTimer
而不是QTimer*m_AutoJoinTimer
我看不到StackObj和PenPathDetails::PenPathDetails之间的关系。还是我遗漏了什么?顺便说一句,谢谢你的链接。非常有趣…Koying,现在没有关系,我想让PenPathDetails使用与StackObj相同的创建方法。
PenPathDetails::PenPathDetails(DiagramScene *parent, int penId) :
m_parent(parent),
m_penId(penId),
m_originalPenId(-1)
{
m_AutoJoinTimer = new QTimer();
m_AutoJoinTimer->setSingleShot(true);
m_MouseLastMovedTimer = new QTimer();
m_MouseLastMovedTimer->setSingleShot(true);
connect(m_AutoJoinTimer, SIGNAL(timeout()), this, SLOT(slotGroupPaths()));
connect(m_MouseLastMovedTimer, SIGNAL(timeout()), this, SLOT(slotMouseReleased()));
reset();
resetOriginalPenId();
}