c++传值效率问题,插件间相互传值,怎么效率最高?

不同插件间进行数据交换,目前所采用的的方式是,传递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 更高一些

  • 这篇博客: 【C++要笑着学】list 核心框架接口的模拟实现 | 运算符重载实现list迭代器 | 妙用模板实现const迭代器中的 0x01 结点初始化 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 其实结点初始化就是 "创建新结点" ,即我们之前讲数据结构时实现的 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)
    		 {}
    	 };
    }

    至此,结点已经写好了。