Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多实例vs.多std::shared\u ptr < P>我只想知道,如果在C++中复制对象,如果我使用了很多类的实例,或者使用 STD::SyrdYPPTR .< /P>,它是否会产生性能上的差异?_C++_Performance_Qt_Std - Fatal编程技术网

多实例vs.多std::shared\u ptr < P>我只想知道,如果在C++中复制对象,如果我使用了很多类的实例,或者使用 STD::SyrdYPPTR .< /P>,它是否会产生性能上的差异?

多实例vs.多std::shared\u ptr < P>我只想知道,如果在C++中复制对象,如果我使用了很多类的实例,或者使用 STD::SyrdYPPTR .< /P>,它是否会产生性能上的差异?,c++,performance,qt,std,C++,Performance,Qt,Std,背景:我有一些结构是通过信号&插槽机制(Qt)传递的。(我知道在发送信号时会复制实例)这些传递可能会发生很多次,因此必须快速且内存使用率低 编辑(添加一些详细信息): 我写了一个嵌入式应用程序(是的,Qt不是我所知道的嵌入式后端最快的),它可以有动态数量的“模块”。每个模块都有自己的功能。每个模块都有一个信号和一个插槽。接收发射信号的模块可自由配置。因此,许多信号可能在很短的时间内发出。在这种情况下,必须尽快发送信号交付的结构包含一些特定于模块的数据以及必须交付给其他模块的数据。我不能说交付的数

背景:我有一些结构是通过信号&插槽机制(Qt)传递的。(我知道在发送信号时会复制实例)这些传递可能会发生很多次,因此必须快速且内存使用率低

编辑(添加一些详细信息):
我写了一个嵌入式应用程序(是的,Qt不是我所知道的嵌入式后端最快的),它可以有动态数量的“模块”。每个模块都有自己的功能。每个模块都有一个信号和一个插槽。接收发射信号的模块可自由配置。因此,许多信号可能在很短的时间内发出。在这种情况下,必须尽快发送信号
交付的结构包含一些特定于模块的数据以及必须交付给其他模块的数据。我不能说交付的数据会有多大,因为在未来,可能会有更多的模块交付更多的数据。

顺便说一句:在这种情况下,我滥用了
std::shared_ptr
。我不使用I来真正分享所有权。Qt在signals和slot中以相同的方式处理引用和实例,它复制对象。因此,为了既能方便地管理实例的内存,又能降低引用的内存使用率,我考虑使用
std::shared\u ptr

Qt在signals和slot中以相同的方式处理引用和实例,它复制对象

不,它只在特定情况下复制。有关详细信息,请参阅。TL;DR:它只在需要通过排队连接传递呼叫时进行复制,并且只有在有接收器连接到给定信号时才进行复制。对于直接连接(或同一线程内的默认自动连接),如果信号和插槽都通过引用传递参数,则不会进行复制

在这种情况下,我滥用std::shared_ptr

这不是虐待。您正在将多少数据传递给一个共享数据结构,该结构由一个
shared\u ptr
持有。这很有道理


真正的问题是:如果您的结构复制成本很高,为什么不通过
QSharedData
qexplicitlyshareddata指针
使用显式共享?为什么你的问题不包括测量结果来证实你的担忧?得了吧,这样的事情是不可能的。你有Qt来帮助你-使用它。

Measure,Measure,Measure。你为什么不写一个基准测试呢?复制指针几乎是免费的(共享ptr稍微贵一点),复制复杂的对象是昂贵的。但如果没有细节,很难给出正确的答案。你预计会有多少份?它们有多大?我不明白这里的二分法。“一个类或std::shared\u ptr的多个实例”是什么意思?如果要共享单个实例,请使用shared_ptr。如果您想拥有一个所有者,请使用unique_ptr,然后共享原始指针。如果您想共享实例而不是所有权,请使用弱_ptr,以避免循环。有时复制会更快(例如线程)。如果没有配置文件的详细信息,完全无法回答。好的,我要读一些东西,谢谢。直到现在,我才开始学习Qt的指针类(我的学徒期刚刚结束,所以我没有那么丰富的经验)。