我正在使用QGraphicsScene
小部件并在其上显示一些点QGraphicsRectItem
。
这意味着在显示时调用大量new
+ addItem()
,并removeItem()
+ delete
来删除未使用的点。
当然,对于性能问题,我已经实现了自己的new
和delete
运算符,这些运算符基本上可以回收预先分配的内存块。
除了 Qt 类(我的意思是 QObject 派生类)之外,这些运算符可以很好地处理任何事情。引发的错误每次都不同,但在所有插槽函数执行完毕且没有错误后,内部调用期间始终发生错误。
我也试过了一些QWidget
添加到某些布局等的实例。
所以问题是, Qt 是否已经拥有自己的new
和删除operators
,我完全不会自己定义自己的?{/ p>
答案 0 :(得分:2)
检查Qt的标题以确定是否存在此类自定义运算符是微不足道的。他们没有。
QGraphicsRectItem
不来自QObject
,因此无论如何都不是问题。由于Qt广泛使用PIMPL惯用语,并且QGraphicsItem
正在堆上分配其PIMPL,因此您没有像您认为的那样从中获得那么多的节省。
您还需要显示运营商的实施情况 - 据我所知,您并未保持正确对齐。您要定位哪些编译器?什么版本的Qt?
要做你想做的事,你必须修改Qt。声明并实施:
void* QGraphicsItem::operator new (size_t sz)
void* QGraphicsItem::operator new[] (std::size_t count)
void QGraphicsItem::operator delete (void* ptr, std::size_t sz)
void QGraphicsItem::operator delete[] (void* ptr, std::size_t sz)
void* QGraphicsItemPrivate::operator new (size_t sz)
void QGraphicsItemPrivate::operator delete (void* ptr, std::size_t sz)
确保您的分配器正确对齐存储。