You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebRTC VideoSendStreamParameters构造函数中config参数为何不通过引用传递?

这个设计是结合C++移动语义、两个参数类型的自身特性、以及所有权语义共同决定的,具体原因如下:

1. webrtc::VideoSendStream::Config 参数用值传递+std::move初始化的原因

  • 从源码可见VideoSendStream::Config只声明了移动构造函数Config(Config&&);,没有提供拷贝构造函数,说明这个类型天生禁止拷贝,只能通过移动传递所有权,你担心的「值传递引入拷贝开销」的情况根本不会发生。
  • 采用值传递的写法,不需要额外重载接收左值引用、右值引用的两个版本构造函数,代码更简洁:当调用方传入右值(比如示例中调用parameters_构造时传入的std::move(config)),参数构造阶段直接调用移动构造完成所有权转移,之后再通过std::move(config)初始化类成员,全程只有两次移动操作,对于包含大量成员的Config结构来说,移动开销远低于拷贝,几乎可以忽略。
  • 这种写法也明确了Config的所有权完全转移到VideoSendStreamParameters实例中,避免外部保留多余的Config副本意外修改,提升运行安全性。

2. VideoOptions 参数用const引用传递的原因

  • VideoOptions本身是存储视频编码、传输相关开关、数值参数的轻量结构,拷贝开销极低,本身也支持拷贝操作。
  • 用const VideoOptions&传递只读入参,既可以明确表达「这个参数不会被修改、不会被转移所有权」的语义,也只需要在初始化类成员的时候做一次拷贝即可,完全满足需求,是轻量只读入参的标准写法。

从调用链也可以验证设计的合理性:外层WebRtcVideoSendStream构造函数接收Config时也用值传递,传入parameters_构造时直接通过std::move转移所有权,全程没有任何拷贝操作,完全符合Config不可拷贝的设计约束。

内容的提问来源于stack exchange,提问作者relent95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:54:05