es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué en el constructor de WebRTC VideoSendStreamParameters el argumento de configuración no se pasa por referencia?

En el constructor de WebRTC VideoSendStreamParameters, el argumento config se pasa por valor (introduciendo así una sobrecarga de copia), pero el argumento options se pasa por referencia. Además, el miembro config se inicializa con std::move(config). Quiero saber por qué lo diseñaron así.

Lo siguiente se extrae del código fuente de Chromium.

namespace webrtc {
...
class VideoSendStream {
  ...
  struct Config {
    ...
    Config() = delete;
    Config(Config&&);
    ... // Le siguen muchos miembros de datos.
  };
  ...
};
...
}

namespace cricket {
...
class WebRtcVideoChannel ... {
  ...
  class WebRtcVideoSendStream {
    ...
    struct VideoSendStreamParameters {
      VideoSendStreamParameters(
          webrtc::VideoSendStream::Config config,
          const VideoOptions& options, ...)
      ...
      webrtc::VideoSendStream::Config config;
      VideoOptions options;
      ...
    };
    VideoSendStreamParameters parameters_ ... ;
    ...
  };
  ...
};

WebRtcVideoChannel::WebRtcVideoSendStream::VideoSendStreamParameters::
    VideoSendStreamParameters(
        webrtc::VideoSendStream::Config config,
        const VideoOptions& options, ...)
    : config(std::move(config)),
      options(options), ... {}

WebRtcVideoChannel::WebRtcVideoSendStream::WebRtcVideoSendStream(
    ...
    webrtc::VideoSendStream::Config config,
    const VideoOptions& options, ...)
    : ...,
      parameters_(std::move(config), options, ...), ...
{
  ...<br>
}
...
Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la cual el argumento config se pasa por valor y luego se inicializa mediante std::move(config), mientras que el argumento options se pasa por referencia, se debe al hecho de que el argumento config se mueve y no se utiliza posteriormente, mientras que el argumento options se utiliza en todo el código. Esta elección de diseño ayuda a reducir la sobrecarga de memoria moviendo el objeto temporal config que no se utilizará más, en lugar de copiarlo. Por otro lado, pasar options por referencia ayuda a evitar copias innecesarias de objetos grandes, ya que las copias pueden ser costosas en términos de tiempo y memoria. En resumen, esta elección de diseño optimiza el rendimiento y el uso de memoria en el código mediante el uso adecuado de la semántica de movimiento y las referencias.

Comments are closed.