不同插件间进行数据交换,目前所采用的的方式是,传递list,参数为const list<T>& var的方式,但是耗时较长,所以想问题有没有更好的优化方案。
QList<T> tmpVarLst = DataMgrInstance::getInstance()->getVars();
pluginA->setVars(tmpVarLst);
T为结构体,约100字节,list最大目前有6400个T,测试比较耗时,像传递这种大量的列表类的参数,有没有什么好的办法呢?
传结构体指针,避免复制避免调用复制构造函数
大量小对象,如果大部分可以重复,可以考虑用享元设计模式+静态对象池
传个指针呀
const list<T> &
已经很快了,这种就不调用拷贝构造,第一句不要用返回值返回。用参数返回 list<T> &
vector 的性能会比 list 更高一些
其实结点初始化就是 "创建新结点" ,即我们之前讲数据结构时实现的 CreateNewList() 接口。
我们先不考虑开空间的事,这里就完成初始化的工作:
① 将数据给给 data
② 将 next 和 prev 都置成空
这些任务我们可以写到 struct ListNode 的构造函数中,我们还可以设计成全缺省,给一个匿名对象 T() 。如此一来,如果没有指定初识值,它就会按模板类型去给对应的初始值了。
💬 结点初始化:
namespace chaos {
template<class T>
struct ListNode {
T _data; // 用来存放结点的数据
ListNode<T>* _next; // 指向后继结点的指针
ListNode<T>* _prev; // 指向前驱结点的指针
ListNode(const T& data = T()) // 全缺省构造(初始化)
: _data(data)
, _next(nullptr)
, _prev(nullptr)
{}
};
}
至此,结点已经写好了。