diff --git a/modules/audio_coding/acm2/acm_receive_test.h b/modules/audio_coding/acm2/acm_receive_test.h
index 6349c63..2095ef9 100644
--- a/modules/audio_coding/acm2/acm_receive_test.h
+++ b/modules/audio_coding/acm2/acm_receive_test.h
@@ -18,7 +18,6 @@
 
 #include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/scoped_refptr.h"
-#include "rtc_base/constructor_magic.h"
 #include "system_wrappers/include/clock.h"
 
 namespace webrtc {
@@ -45,6 +44,9 @@
                        rtc::scoped_refptr<AudioDecoderFactory> decoder_factory);
   virtual ~AcmReceiveTestOldApi();
 
+  AcmReceiveTestOldApi(const AcmReceiveTestOldApi&) = delete;
+  AcmReceiveTestOldApi& operator=(const AcmReceiveTestOldApi&) = delete;
+
   // Registers the codecs with default parameters from ACM.
   void RegisterDefaultCodecs();
 
@@ -67,8 +69,6 @@
   AudioSink* audio_sink_;
   int output_freq_hz_;
   NumOutputChannels exptected_output_channels_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AcmReceiveTestOldApi);
 };
 
 // This test toggles the output frequency every `toggle_period_ms`. The test
diff --git a/modules/audio_coding/acm2/acm_send_test.h b/modules/audio_coding/acm2/acm_send_test.h
index 0c82415..b14cb80 100644
--- a/modules/audio_coding/acm2/acm_send_test.h
+++ b/modules/audio_coding/acm2/acm_send_test.h
@@ -17,7 +17,6 @@
 #include "api/audio/audio_frame.h"
 #include "modules/audio_coding/include/audio_coding_module.h"
 #include "modules/audio_coding/neteq/tools/packet_source.h"
-#include "rtc_base/constructor_magic.h"
 #include "system_wrappers/include/clock.h"
 
 namespace webrtc {
@@ -35,6 +34,9 @@
                     int test_duration_ms);
   ~AcmSendTestOldApi() override;
 
+  AcmSendTestOldApi(const AcmSendTestOldApi&) = delete;
+  AcmSendTestOldApi& operator=(const AcmSendTestOldApi&) = delete;
+
   // Registers the send codec. Returns true on success, false otherwise.
   bool RegisterCodec(const char* payload_name,
                      int sampling_freq_hz,
@@ -81,8 +83,6 @@
   uint16_t sequence_number_;
   std::vector<uint8_t> last_payload_vec_;
   bool data_to_send_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AcmSendTestOldApi);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h b/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h
index 1c91fa1..664e76b 100644
--- a/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h
+++ b/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h
@@ -21,7 +21,6 @@
 #include "modules/audio_coding/audio_network_adaptor/debug_dump_writer.h"
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h"
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -44,6 +43,9 @@
 
   ~AudioNetworkAdaptorImpl() override;
 
+  AudioNetworkAdaptorImpl(const AudioNetworkAdaptorImpl&) = delete;
+  AudioNetworkAdaptorImpl& operator=(const AudioNetworkAdaptorImpl&) = delete;
+
   void SetUplinkBandwidth(int uplink_bandwidth_bps) override;
 
   void SetUplinkPacketLossFraction(float uplink_packet_loss_fraction) override;
@@ -80,8 +82,6 @@
   absl::optional<AudioEncoderRuntimeConfig> prev_config_;
 
   ANAStats stats_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioNetworkAdaptorImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/bitrate_controller.h b/modules/audio_coding/audio_network_adaptor/bitrate_controller.h
index 41bfbd1..c103214 100644
--- a/modules/audio_coding/audio_network_adaptor/bitrate_controller.h
+++ b/modules/audio_coding/audio_network_adaptor/bitrate_controller.h
@@ -16,7 +16,6 @@
 #include "absl/types/optional.h"
 #include "modules/audio_coding/audio_network_adaptor/controller.h"
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace audio_network_adaptor {
@@ -39,6 +38,9 @@
 
   ~BitrateController() override;
 
+  BitrateController(const BitrateController&) = delete;
+  BitrateController& operator=(const BitrateController&) = delete;
+
   void UpdateNetworkMetrics(const NetworkMetrics& network_metrics) override;
 
   void MakeDecision(AudioEncoderRuntimeConfig* config) override;
@@ -49,7 +51,6 @@
   int frame_length_ms_;
   absl::optional<int> target_audio_bitrate_bps_;
   absl::optional<size_t> overhead_bytes_per_packet_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(BitrateController);
 };
 
 }  // namespace audio_network_adaptor
diff --git a/modules/audio_coding/audio_network_adaptor/channel_controller.h b/modules/audio_coding/audio_network_adaptor/channel_controller.h
index f211f40..3cd4bb7 100644
--- a/modules/audio_coding/audio_network_adaptor/channel_controller.h
+++ b/modules/audio_coding/audio_network_adaptor/channel_controller.h
@@ -16,7 +16,6 @@
 #include "absl/types/optional.h"
 #include "modules/audio_coding/audio_network_adaptor/controller.h"
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -41,6 +40,9 @@
 
   ~ChannelController() override;
 
+  ChannelController(const ChannelController&) = delete;
+  ChannelController& operator=(const ChannelController&) = delete;
+
   void UpdateNetworkMetrics(const NetworkMetrics& network_metrics) override;
 
   void MakeDecision(AudioEncoderRuntimeConfig* config) override;
@@ -49,7 +51,6 @@
   const Config config_;
   size_t channels_to_encode_;
   absl::optional<int> uplink_bandwidth_bps_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(ChannelController);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/controller_manager.h b/modules/audio_coding/audio_network_adaptor/controller_manager.h
index c168ebc..f7d7b34 100644
--- a/modules/audio_coding/audio_network_adaptor/controller_manager.h
+++ b/modules/audio_coding/audio_network_adaptor/controller_manager.h
@@ -17,7 +17,6 @@
 #include <vector>
 
 #include "modules/audio_coding/audio_network_adaptor/controller.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -80,6 +79,9 @@
 
   ~ControllerManagerImpl() override;
 
+  ControllerManagerImpl(const ControllerManagerImpl&) = delete;
+  ControllerManagerImpl& operator=(const ControllerManagerImpl&) = delete;
+
   // Sort controllers based on their significance.
   std::vector<Controller*> GetSortedControllers(
       const Controller::NetworkMetrics& metrics) override;
@@ -114,8 +116,6 @@
   // `scoring_points_` saves the scoring points of various
   // controllers.
   std::map<const Controller*, ScoringPoint> controller_scoring_points_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ControllerManagerImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/dtx_controller.h b/modules/audio_coding/audio_network_adaptor/dtx_controller.h
index 83fdf3d..b8a8e47 100644
--- a/modules/audio_coding/audio_network_adaptor/dtx_controller.h
+++ b/modules/audio_coding/audio_network_adaptor/dtx_controller.h
@@ -14,7 +14,6 @@
 #include "absl/types/optional.h"
 #include "modules/audio_coding/audio_network_adaptor/controller.h"
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -35,6 +34,9 @@
 
   ~DtxController() override;
 
+  DtxController(const DtxController&) = delete;
+  DtxController& operator=(const DtxController&) = delete;
+
   void UpdateNetworkMetrics(const NetworkMetrics& network_metrics) override;
 
   void MakeDecision(AudioEncoderRuntimeConfig* config) override;
@@ -43,7 +45,6 @@
   const Config config_;
   bool dtx_enabled_;
   absl::optional<int> uplink_bandwidth_bps_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(DtxController);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/event_log_writer.h b/modules/audio_coding/audio_network_adaptor/event_log_writer.h
index c5e57e6..a147311 100644
--- a/modules/audio_coding/audio_network_adaptor/event_log_writer.h
+++ b/modules/audio_coding/audio_network_adaptor/event_log_writer.h
@@ -12,7 +12,6 @@
 #define MODULES_AUDIO_CODING_AUDIO_NETWORK_ADAPTOR_EVENT_LOG_WRITER_H_
 
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 class RtcEventLog;
@@ -24,6 +23,10 @@
                  float min_bitrate_change_fraction,
                  float min_packet_loss_change_fraction);
   ~EventLogWriter();
+
+  EventLogWriter(const EventLogWriter&) = delete;
+  EventLogWriter& operator=(const EventLogWriter&) = delete;
+
   void MaybeLogEncoderConfig(const AudioEncoderRuntimeConfig& config);
 
  private:
@@ -34,7 +37,6 @@
   const float min_bitrate_change_fraction_;
   const float min_packet_loss_change_fraction_;
   AudioEncoderRuntimeConfig last_logged_config_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(EventLogWriter);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based.h b/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based.h
index 85d235e..0c57ad1 100644
--- a/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based.h
+++ b/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based.h
@@ -18,7 +18,6 @@
 #include "modules/audio_coding/audio_network_adaptor/controller.h"
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h"
 #include "modules/audio_coding/audio_network_adaptor/util/threshold_curve.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -53,6 +52,9 @@
 
   ~FecControllerPlrBased() override;
 
+  FecControllerPlrBased(const FecControllerPlrBased&) = delete;
+  FecControllerPlrBased& operator=(const FecControllerPlrBased&) = delete;
+
   void UpdateNetworkMetrics(const NetworkMetrics& network_metrics) override;
 
   void MakeDecision(AudioEncoderRuntimeConfig* config) override;
@@ -65,8 +67,6 @@
   bool fec_enabled_;
   absl::optional<int> uplink_bandwidth_bps_;
   const std::unique_ptr<SmoothingFilter> packet_loss_smoother_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(FecControllerPlrBased);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/audio_network_adaptor/frame_length_controller.h b/modules/audio_coding/audio_network_adaptor/frame_length_controller.h
index 74a787e..04693f8 100644
--- a/modules/audio_coding/audio_network_adaptor/frame_length_controller.h
+++ b/modules/audio_coding/audio_network_adaptor/frame_length_controller.h
@@ -19,7 +19,6 @@
 #include "absl/types/optional.h"
 #include "modules/audio_coding/audio_network_adaptor/controller.h"
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -62,6 +61,9 @@
 
   ~FrameLengthController() override;
 
+  FrameLengthController(const FrameLengthController&) = delete;
+  FrameLengthController& operator=(const FrameLengthController&) = delete;
+
   void UpdateNetworkMetrics(const NetworkMetrics& network_metrics) override;
 
   void MakeDecision(AudioEncoderRuntimeConfig* config) override;
@@ -84,8 +86,6 @@
   // True if the previous frame length decision was an increase, otherwise
   // false.
   bool prev_decision_increase_ = false;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(FrameLengthController);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/g711/audio_decoder_pcm.h b/modules/audio_coding/codecs/g711/audio_decoder_pcm.h
index 6185918..3fa42cb 100644
--- a/modules/audio_coding/codecs/g711/audio_decoder_pcm.h
+++ b/modules/audio_coding/codecs/g711/audio_decoder_pcm.h
@@ -19,7 +19,6 @@
 #include "api/audio_codecs/audio_decoder.h"
 #include "rtc_base/buffer.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -28,6 +27,10 @@
   explicit AudioDecoderPcmU(size_t num_channels) : num_channels_(num_channels) {
     RTC_DCHECK_GE(num_channels, 1);
   }
+
+  AudioDecoderPcmU(const AudioDecoderPcmU&) = delete;
+  AudioDecoderPcmU& operator=(const AudioDecoderPcmU&) = delete;
+
   void Reset() override;
   std::vector<ParseResult> ParsePayload(rtc::Buffer&& payload,
                                         uint32_t timestamp) override;
@@ -44,7 +47,6 @@
 
  private:
   const size_t num_channels_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcmU);
 };
 
 class AudioDecoderPcmA final : public AudioDecoder {
@@ -52,6 +54,10 @@
   explicit AudioDecoderPcmA(size_t num_channels) : num_channels_(num_channels) {
     RTC_DCHECK_GE(num_channels, 1);
   }
+
+  AudioDecoderPcmA(const AudioDecoderPcmA&) = delete;
+  AudioDecoderPcmA& operator=(const AudioDecoderPcmA&) = delete;
+
   void Reset() override;
   std::vector<ParseResult> ParsePayload(rtc::Buffer&& payload,
                                         uint32_t timestamp) override;
@@ -68,7 +74,6 @@
 
  private:
   const size_t num_channels_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcmA);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/g711/audio_encoder_pcm.h b/modules/audio_coding/codecs/g711/audio_encoder_pcm.h
index c4413f5..d50be4b 100644
--- a/modules/audio_coding/codecs/g711/audio_encoder_pcm.h
+++ b/modules/audio_coding/codecs/g711/audio_encoder_pcm.h
@@ -17,7 +17,6 @@
 #include "absl/types/optional.h"
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/units/time_delta.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -83,6 +82,9 @@
   explicit AudioEncoderPcmA(const Config& config)
       : AudioEncoderPcm(config, kSampleRateHz) {}
 
+  AudioEncoderPcmA(const AudioEncoderPcmA&) = delete;
+  AudioEncoderPcmA& operator=(const AudioEncoderPcmA&) = delete;
+
  protected:
   size_t EncodeCall(const int16_t* audio,
                     size_t input_len,
@@ -94,7 +96,6 @@
 
  private:
   static const int kSampleRateHz = 8000;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderPcmA);
 };
 
 class AudioEncoderPcmU final : public AudioEncoderPcm {
@@ -106,6 +107,9 @@
   explicit AudioEncoderPcmU(const Config& config)
       : AudioEncoderPcm(config, kSampleRateHz) {}
 
+  AudioEncoderPcmU(const AudioEncoderPcmU&) = delete;
+  AudioEncoderPcmU& operator=(const AudioEncoderPcmU&) = delete;
+
  protected:
   size_t EncodeCall(const int16_t* audio,
                     size_t input_len,
@@ -117,7 +121,6 @@
 
  private:
   static const int kSampleRateHz = 8000;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderPcmU);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/g722/audio_decoder_g722.h b/modules/audio_coding/codecs/g722/audio_decoder_g722.h
index eeca139..39e9e63 100644
--- a/modules/audio_coding/codecs/g722/audio_decoder_g722.h
+++ b/modules/audio_coding/codecs/g722/audio_decoder_g722.h
@@ -12,7 +12,6 @@
 #define MODULES_AUDIO_CODING_CODECS_G722_AUDIO_DECODER_G722_H_
 
 #include "api/audio_codecs/audio_decoder.h"
-#include "rtc_base/constructor_magic.h"
 
 typedef struct WebRtcG722DecInst G722DecInst;
 
@@ -22,6 +21,10 @@
  public:
   AudioDecoderG722Impl();
   ~AudioDecoderG722Impl() override;
+
+  AudioDecoderG722Impl(const AudioDecoderG722Impl&) = delete;
+  AudioDecoderG722Impl& operator=(const AudioDecoderG722Impl&) = delete;
+
   bool HasDecodePlc() const override;
   void Reset() override;
   std::vector<ParseResult> ParsePayload(rtc::Buffer&& payload,
@@ -39,13 +42,17 @@
 
  private:
   G722DecInst* dec_state_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderG722Impl);
 };
 
 class AudioDecoderG722StereoImpl final : public AudioDecoder {
  public:
   AudioDecoderG722StereoImpl();
   ~AudioDecoderG722StereoImpl() override;
+
+  AudioDecoderG722StereoImpl(const AudioDecoderG722StereoImpl&) = delete;
+  AudioDecoderG722StereoImpl& operator=(const AudioDecoderG722StereoImpl&) =
+      delete;
+
   void Reset() override;
   std::vector<ParseResult> ParsePayload(rtc::Buffer&& payload,
                                         uint32_t timestamp) override;
@@ -71,7 +78,6 @@
 
   G722DecInst* dec_state_left_;
   G722DecInst* dec_state_right_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderG722StereoImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/g722/audio_encoder_g722.h b/modules/audio_coding/codecs/g722/audio_encoder_g722.h
index c836503..a932aa8 100644
--- a/modules/audio_coding/codecs/g722/audio_encoder_g722.h
+++ b/modules/audio_coding/codecs/g722/audio_encoder_g722.h
@@ -20,7 +20,6 @@
 #include "api/units/time_delta.h"
 #include "modules/audio_coding/codecs/g722/g722_interface.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -29,6 +28,9 @@
   AudioEncoderG722Impl(const AudioEncoderG722Config& config, int payload_type);
   ~AudioEncoderG722Impl() override;
 
+  AudioEncoderG722Impl(const AudioEncoderG722Impl&) = delete;
+  AudioEncoderG722Impl& operator=(const AudioEncoderG722Impl&) = delete;
+
   int SampleRateHz() const override;
   size_t NumChannels() const override;
   int RtpTimestampRateHz() const override;
@@ -63,7 +65,6 @@
   uint32_t first_timestamp_in_buffer_;
   const std::unique_ptr<EncoderState[]> encoders_;
   rtc::Buffer interleave_buffer_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderG722Impl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h b/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h
index c2d62ed..46ba755 100644
--- a/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h
+++ b/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h
@@ -18,7 +18,6 @@
 
 #include "api/audio_codecs/audio_decoder.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 
 typedef struct iLBC_decinst_t_ IlbcDecoderInstance;
 
@@ -28,6 +27,10 @@
  public:
   AudioDecoderIlbcImpl();
   ~AudioDecoderIlbcImpl() override;
+
+  AudioDecoderIlbcImpl(const AudioDecoderIlbcImpl&) = delete;
+  AudioDecoderIlbcImpl& operator=(const AudioDecoderIlbcImpl&) = delete;
+
   bool HasDecodePlc() const override;
   size_t DecodePlc(size_t num_frames, int16_t* decoded) override;
   void Reset() override;
@@ -45,7 +48,6 @@
 
  private:
   IlbcDecoderInstance* dec_state_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderIlbcImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h b/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h
index 05a900e..c8dfa2c 100644
--- a/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h
+++ b/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h
@@ -21,7 +21,6 @@
 #include "api/audio_codecs/ilbc/audio_encoder_ilbc_config.h"
 #include "api/units/time_delta.h"
 #include "modules/audio_coding/codecs/ilbc/ilbc.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -30,6 +29,9 @@
   AudioEncoderIlbcImpl(const AudioEncoderIlbcConfig& config, int payload_type);
   ~AudioEncoderIlbcImpl() override;
 
+  AudioEncoderIlbcImpl(const AudioEncoderIlbcImpl&) = delete;
+  AudioEncoderIlbcImpl& operator=(const AudioEncoderIlbcImpl&) = delete;
+
   int SampleRateHz() const override;
   size_t NumChannels() const override;
   size_t Num10MsFramesInNextPacket() const override;
@@ -53,7 +55,6 @@
   uint32_t first_timestamp_in_buffer_;
   int16_t input_buffer_[kMaxSamplesPerPacket];
   IlbcEncoderInstance* encoder_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderIlbcImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/isac/audio_decoder_isac_t.h b/modules/audio_coding/codecs/isac/audio_decoder_isac_t.h
index 23a3020..aae708f 100644
--- a/modules/audio_coding/codecs/isac/audio_decoder_isac_t.h
+++ b/modules/audio_coding/codecs/isac/audio_decoder_isac_t.h
@@ -16,7 +16,6 @@
 #include "absl/types/optional.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/scoped_refptr.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -30,6 +29,9 @@
   explicit AudioDecoderIsacT(const Config& config);
   virtual ~AudioDecoderIsacT() override;
 
+  AudioDecoderIsacT(const AudioDecoderIsacT&) = delete;
+  AudioDecoderIsacT& operator=(const AudioDecoderIsacT&) = delete;
+
   bool HasDecodePlc() const override;
   size_t DecodePlc(size_t num_frames, int16_t* decoded) override;
   void Reset() override;
@@ -45,8 +47,6 @@
  private:
   typename T::instance_type* isac_state_;
   int sample_rate_hz_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderIsacT);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h b/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h
index 8bde0e3..c382ea0 100644
--- a/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h
+++ b/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h
@@ -18,7 +18,6 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/scoped_refptr.h"
 #include "api/units/time_delta.h"
-#include "rtc_base/constructor_magic.h"
 #include "system_wrappers/include/field_trial.h"
 
 namespace webrtc {
@@ -44,6 +43,9 @@
   explicit AudioEncoderIsacT(const Config& config);
   ~AudioEncoderIsacT() override;
 
+  AudioEncoderIsacT(const AudioEncoderIsacT&) = delete;
+  AudioEncoderIsacT& operator=(const AudioEncoderIsacT&) = delete;
+
   int SampleRateHz() const override;
   size_t NumChannels() const override;
   size_t Num10MsFramesInNextPacket() const override;
@@ -99,8 +101,6 @@
   // Start out with a reasonable default that we can use until we receive a real
   // value.
   DataSize overhead_per_packet_ = DataSize::Bytes(28);
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderIsacT);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/opus/audio_decoder_multi_channel_opus_impl.h b/modules/audio_coding/codecs/opus/audio_decoder_multi_channel_opus_impl.h
index efc3f0d..2ff47a8 100644
--- a/modules/audio_coding/codecs/opus/audio_decoder_multi_channel_opus_impl.h
+++ b/modules/audio_coding/codecs/opus/audio_decoder_multi_channel_opus_impl.h
@@ -21,7 +21,6 @@
 #include "api/audio_codecs/opus/audio_decoder_multi_channel_opus_config.h"
 #include "modules/audio_coding/codecs/opus/opus_interface.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -32,6 +31,11 @@
 
   ~AudioDecoderMultiChannelOpusImpl() override;
 
+  AudioDecoderMultiChannelOpusImpl(const AudioDecoderMultiChannelOpusImpl&) =
+      delete;
+  AudioDecoderMultiChannelOpusImpl& operator=(
+      const AudioDecoderMultiChannelOpusImpl&) = delete;
+
   std::vector<ParseResult> ParsePayload(rtc::Buffer&& payload,
                                         uint32_t timestamp) override;
   void Reset() override;
@@ -63,7 +67,6 @@
 
   OpusDecInst* dec_state_;
   const AudioDecoderMultiChannelOpusConfig config_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderMultiChannelOpusImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/opus/audio_decoder_opus.h b/modules/audio_coding/codecs/opus/audio_decoder_opus.h
index c792722..e8fd044 100644
--- a/modules/audio_coding/codecs/opus/audio_decoder_opus.h
+++ b/modules/audio_coding/codecs/opus/audio_decoder_opus.h
@@ -19,7 +19,6 @@
 #include "api/audio_codecs/audio_decoder.h"
 #include "modules/audio_coding/codecs/opus/opus_interface.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -29,6 +28,9 @@
                                 int sample_rate_hz = 48000);
   ~AudioDecoderOpusImpl() override;
 
+  AudioDecoderOpusImpl(const AudioDecoderOpusImpl&) = delete;
+  AudioDecoderOpusImpl& operator=(const AudioDecoderOpusImpl&) = delete;
+
   std::vector<ParseResult> ParsePayload(rtc::Buffer&& payload,
                                         uint32_t timestamp) override;
   void Reset() override;
@@ -55,7 +57,6 @@
   OpusDecInst* dec_state_;
   const size_t channels_;
   const int sample_rate_hz_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderOpusImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/opus/audio_encoder_multi_channel_opus_impl.h b/modules/audio_coding/codecs/opus/audio_encoder_multi_channel_opus_impl.h
index eadb4a6..8a72105 100644
--- a/modules/audio_coding/codecs/opus/audio_encoder_multi_channel_opus_impl.h
+++ b/modules/audio_coding/codecs/opus/audio_encoder_multi_channel_opus_impl.h
@@ -21,7 +21,6 @@
 #include "api/audio_codecs/opus/audio_encoder_multi_channel_opus_config.h"
 #include "api/units/time_delta.h"
 #include "modules/audio_coding/codecs/opus/opus_interface.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -34,6 +33,11 @@
       int payload_type);
   ~AudioEncoderMultiChannelOpusImpl() override;
 
+  AudioEncoderMultiChannelOpusImpl(const AudioEncoderMultiChannelOpusImpl&) =
+      delete;
+  AudioEncoderMultiChannelOpusImpl& operator=(
+      const AudioEncoderMultiChannelOpusImpl&) = delete;
+
   // Static interface for use by BuiltinAudioEncoderFactory.
   static constexpr const char* GetPayloadName() { return "multiopus"; }
   static absl::optional<AudioCodecInfo> QueryAudioEncoder(
@@ -81,7 +85,6 @@
   int next_frame_length_ms_;
 
   friend struct AudioEncoderMultiChannelOpus;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderMultiChannelOpusImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/opus/audio_encoder_opus.h b/modules/audio_coding/codecs/opus/audio_encoder_opus.h
index c7ee4f4..14477cc 100644
--- a/modules/audio_coding/codecs/opus/audio_encoder_opus.h
+++ b/modules/audio_coding/codecs/opus/audio_encoder_opus.h
@@ -23,7 +23,6 @@
 #include "common_audio/smoothing_filter.h"
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h"
 #include "modules/audio_coding/codecs/opus/opus_interface.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -61,6 +60,9 @@
   AudioEncoderOpusImpl(int payload_type, const SdpAudioFormat& format);
   ~AudioEncoderOpusImpl() override;
 
+  AudioEncoderOpusImpl(const AudioEncoderOpusImpl&) = delete;
+  AudioEncoderOpusImpl& operator=(const AudioEncoderOpusImpl&) = delete;
+
   int SampleRateHz() const override;
   size_t NumChannels() const override;
   int RtpTimestampRateHz() const override;
@@ -175,7 +177,6 @@
   int consecutive_dtx_frames_;
 
   friend struct AudioEncoderOpus;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderOpusImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h b/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h
index f08c4a6..6f50161 100644
--- a/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h
+++ b/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h
@@ -18,13 +18,16 @@
 
 #include "api/audio_codecs/audio_decoder.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
 class AudioDecoderPcm16B final : public AudioDecoder {
  public:
   AudioDecoderPcm16B(int sample_rate_hz, size_t num_channels);
+
+  AudioDecoderPcm16B(const AudioDecoderPcm16B&) = delete;
+  AudioDecoderPcm16B& operator=(const AudioDecoderPcm16B&) = delete;
+
   void Reset() override;
   std::vector<ParseResult> ParsePayload(rtc::Buffer&& payload,
                                         uint32_t timestamp) override;
@@ -42,7 +45,6 @@
  private:
   const int sample_rate_hz_;
   const size_t num_channels_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcm16B);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h b/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h
index 71c7572..c363b40 100644
--- a/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h
+++ b/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h
@@ -12,7 +12,6 @@
 #define MODULES_AUDIO_CODING_CODECS_PCM16B_AUDIO_ENCODER_PCM16B_H_
 
 #include "modules/audio_coding/codecs/g711/audio_encoder_pcm.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -29,6 +28,9 @@
   explicit AudioEncoderPcm16B(const Config& config)
       : AudioEncoderPcm(config, config.sample_rate_hz) {}
 
+  AudioEncoderPcm16B(const AudioEncoderPcm16B&) = delete;
+  AudioEncoderPcm16B& operator=(const AudioEncoderPcm16B&) = delete;
+
  protected:
   size_t EncodeCall(const int16_t* audio,
                     size_t input_len,
@@ -37,9 +39,6 @@
   size_t BytesPerSample() const override;
 
   AudioEncoder::CodecType GetCodecType() const override;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderPcm16B);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/red/audio_encoder_copy_red.h b/modules/audio_coding/codecs/red/audio_encoder_copy_red.h
index d5b1bf6..d163193 100644
--- a/modules/audio_coding/codecs/red/audio_encoder_copy_red.h
+++ b/modules/audio_coding/codecs/red/audio_encoder_copy_red.h
@@ -23,7 +23,6 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/units/time_delta.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -47,6 +46,9 @@
 
   ~AudioEncoderCopyRed() override;
 
+  AudioEncoderCopyRed(const AudioEncoderCopyRed&) = delete;
+  AudioEncoderCopyRed& operator=(const AudioEncoderCopyRed&) = delete;
+
   int SampleRateHz() const override;
   size_t NumChannels() const override;
   int RtpTimestampRateHz() const override;
@@ -92,8 +94,6 @@
   size_t max_packet_length_;
   int red_payload_type_;
   std::list<std::pair<EncodedInfo, rtc::Buffer>> redundant_encodings_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderCopyRed);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/accelerate.h b/modules/audio_coding/neteq/accelerate.h
index e03f609..01fe874 100644
--- a/modules/audio_coding/neteq/accelerate.h
+++ b/modules/audio_coding/neteq/accelerate.h
@@ -15,7 +15,6 @@
 #include <stdint.h>
 
 #include "modules/audio_coding/neteq/time_stretch.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -33,6 +32,9 @@
              const BackgroundNoise& background_noise)
       : TimeStretch(sample_rate_hz, num_channels, background_noise) {}
 
+  Accelerate(const Accelerate&) = delete;
+  Accelerate& operator=(const Accelerate&) = delete;
+
   // This method performs the actual Accelerate operation. The samples are
   // read from `input`, of length `input_length` elements, and are written to
   // `output`. The number of samples removed through time-stretching is
@@ -62,9 +64,6 @@
                                       bool active_speech,
                                       bool fast_mode,
                                       AudioMultiVector* output) const override;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(Accelerate);
 };
 
 struct AccelerateFactory {
diff --git a/modules/audio_coding/neteq/audio_multi_vector.h b/modules/audio_coding/neteq/audio_multi_vector.h
index 10179d7..715ec6d 100644
--- a/modules/audio_coding/neteq/audio_multi_vector.h
+++ b/modules/audio_coding/neteq/audio_multi_vector.h
@@ -18,7 +18,6 @@
 
 #include "api/array_view.h"
 #include "modules/audio_coding/neteq/audio_vector.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -34,6 +33,9 @@
 
   virtual ~AudioMultiVector();
 
+  AudioMultiVector(const AudioMultiVector&) = delete;
+  AudioMultiVector& operator=(const AudioMultiVector&) = delete;
+
   // Deletes all values and make the vector empty.
   virtual void Clear();
 
@@ -130,9 +132,6 @@
  protected:
   std::vector<AudioVector*> channels_;
   size_t num_channels_;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioMultiVector);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/audio_vector.h b/modules/audio_coding/neteq/audio_vector.h
index c722b56..d68f3ec 100644
--- a/modules/audio_coding/neteq/audio_vector.h
+++ b/modules/audio_coding/neteq/audio_vector.h
@@ -17,7 +17,6 @@
 #include <memory>
 
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -31,6 +30,9 @@
 
   virtual ~AudioVector();
 
+  AudioVector(const AudioVector&) = delete;
+  AudioVector& operator=(const AudioVector&) = delete;
+
   // Deletes all values and make the vector empty.
   virtual void Clear();
 
@@ -164,8 +166,6 @@
 
   // The index of the sample after the last sample in `array_`.
   size_t end_index_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioVector);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/background_noise.h b/modules/audio_coding/neteq/background_noise.h
index 005b376..8e6d589 100644
--- a/modules/audio_coding/neteq/background_noise.h
+++ b/modules/audio_coding/neteq/background_noise.h
@@ -16,7 +16,6 @@
 #include <memory>
 
 #include "api/array_view.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -34,6 +33,9 @@
   explicit BackgroundNoise(size_t num_channels);
   virtual ~BackgroundNoise();
 
+  BackgroundNoise(const BackgroundNoise&) = delete;
+  BackgroundNoise& operator=(const BackgroundNoise&) = delete;
+
   void Reset();
 
   // Updates the parameter estimates based on the signal currently in the
@@ -130,8 +132,6 @@
   size_t num_channels_;
   std::unique_ptr<ChannelParameters[]> channel_parameters_;
   bool initialized_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(BackgroundNoise);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/buffer_level_filter.h b/modules/audio_coding/neteq/buffer_level_filter.h
index 94a3715..ced36da 100644
--- a/modules/audio_coding/neteq/buffer_level_filter.h
+++ b/modules/audio_coding/neteq/buffer_level_filter.h
@@ -14,14 +14,16 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "rtc_base/constructor_magic.h"
-
 namespace webrtc {
 
 class BufferLevelFilter {
  public:
   BufferLevelFilter();
   virtual ~BufferLevelFilter() {}
+
+  BufferLevelFilter(const BufferLevelFilter&) = delete;
+  BufferLevelFilter& operator=(const BufferLevelFilter&) = delete;
+
   virtual void Reset();
 
   // Updates the filter. Current buffer size is `buffer_size_samples`.
@@ -46,8 +48,6 @@
  private:
   int level_factor_;  // Filter factor for the buffer level filter in Q8.
   int filtered_current_level_;  // Filtered current buffer level in Q8.
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(BufferLevelFilter);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/comfort_noise.h b/modules/audio_coding/neteq/comfort_noise.h
index 6419d39..31fcee3 100644
--- a/modules/audio_coding/neteq/comfort_noise.h
+++ b/modules/audio_coding/neteq/comfort_noise.h
@@ -13,8 +13,6 @@
 
 #include <stddef.h>
 
-#include "rtc_base/constructor_magic.h"
-
 namespace webrtc {
 
 // Forward declarations.
@@ -42,6 +40,9 @@
         decoder_database_(decoder_database),
         sync_buffer_(sync_buffer) {}
 
+  ComfortNoise(const ComfortNoise&) = delete;
+  ComfortNoise& operator=(const ComfortNoise&) = delete;
+
   // Resets the state. Should be called before each new comfort noise period.
   void Reset();
 
@@ -65,7 +66,6 @@
   DecoderDatabase* decoder_database_;
   SyncBuffer* sync_buffer_;
   int internal_error_code_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(ComfortNoise);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/decision_logic.h b/modules/audio_coding/neteq/decision_logic.h
index 693f616..a8571ad 100644
--- a/modules/audio_coding/neteq/decision_logic.h
+++ b/modules/audio_coding/neteq/decision_logic.h
@@ -18,7 +18,6 @@
 #include "api/neteq/tick_timer.h"
 #include "modules/audio_coding/neteq/buffer_level_filter.h"
 #include "modules/audio_coding/neteq/delay_manager.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/experiments/field_trial_parser.h"
 
 namespace webrtc {
@@ -37,6 +36,9 @@
 
   ~DecisionLogic() override;
 
+  DecisionLogic(const DecisionLogic&) = delete;
+  DecisionLogic& operator=(const DecisionLogic&) = delete;
+
   // Resets object to a clean state.
   void Reset() override;
 
@@ -192,8 +194,6 @@
   FieldTrialParameter<bool> estimate_dtx_delay_;
   FieldTrialParameter<bool> time_stretch_cn_;
   FieldTrialConstrained<int> target_level_window_ms_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DecisionLogic);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/decoder_database.h b/modules/audio_coding/neteq/decoder_database.h
index a63a9cf..6c2ce54 100644
--- a/modules/audio_coding/neteq/decoder_database.h
+++ b/modules/audio_coding/neteq/decoder_database.h
@@ -20,7 +20,6 @@
 #include "api/scoped_refptr.h"
 #include "modules/audio_coding/codecs/cng/webrtc_cng.h"
 #include "modules/audio_coding/neteq/packet.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -122,6 +121,9 @@
 
   virtual ~DecoderDatabase();
 
+  DecoderDatabase(const DecoderDatabase&) = delete;
+  DecoderDatabase& operator=(const DecoderDatabase&) = delete;
+
   // Returns true if the database is empty.
   virtual bool Empty() const;
 
@@ -208,8 +210,6 @@
   mutable std::unique_ptr<ComfortNoiseDecoder> active_cng_decoder_;
   rtc::scoped_refptr<AudioDecoderFactory> decoder_factory_;
   const absl::optional<AudioCodecPairId> codec_pair_id_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DecoderDatabase);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/delay_manager.h b/modules/audio_coding/neteq/delay_manager.h
index 410aa94..56d108a 100644
--- a/modules/audio_coding/neteq/delay_manager.h
+++ b/modules/audio_coding/neteq/delay_manager.h
@@ -22,7 +22,6 @@
 #include "modules/audio_coding/neteq/relative_arrival_delay_tracker.h"
 #include "modules/audio_coding/neteq/reorder_optimizer.h"
 #include "modules/audio_coding/neteq/underrun_optimizer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -52,6 +51,9 @@
 
   virtual ~DelayManager();
 
+  DelayManager(const DelayManager&) = delete;
+  DelayManager& operator=(const DelayManager&) = delete;
+
   // Updates the delay manager with a new incoming packet, with `timestamp` from
   // the RTP header. This updates the statistics and a new target buffer level
   // is calculated. Returns the relative delay if it can be calculated. If
@@ -111,9 +113,7 @@
   int maximum_delay_ms_;            // Externally set maximum allowed delay.
 
   int packet_len_ms_ = 0;
-  int target_level_ms_;       // Currently preferred buffer level.
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DelayManager);
+  int target_level_ms_;  // Currently preferred buffer level.
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/dsp_helper.h b/modules/audio_coding/neteq/dsp_helper.h
index 7bdeba6..4aead7d 100644
--- a/modules/audio_coding/neteq/dsp_helper.h
+++ b/modules/audio_coding/neteq/dsp_helper.h
@@ -16,7 +16,6 @@
 
 #include "modules/audio_coding/neteq/audio_multi_vector.h"
 #include "modules/audio_coding/neteq/audio_vector.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -150,11 +149,12 @@
                               bool compensate_delay,
                               int16_t* output);
 
+  DspHelper(const DspHelper&) = delete;
+  DspHelper& operator=(const DspHelper&) = delete;
+
  private:
   // Table of constants used in method DspHelper::ParabolicFit().
   static const int16_t kParabolaCoefficients[17][3];
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DspHelper);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/dtmf_buffer.h b/modules/audio_coding/neteq/dtmf_buffer.h
index 9209cae..62b7515 100644
--- a/modules/audio_coding/neteq/dtmf_buffer.h
+++ b/modules/audio_coding/neteq/dtmf_buffer.h
@@ -16,8 +16,6 @@
 
 #include <list>
 
-#include "rtc_base/constructor_magic.h"
-
 namespace webrtc {
 
 struct DtmfEvent {
@@ -50,6 +48,9 @@
 
   virtual ~DtmfBuffer();
 
+  DtmfBuffer(const DtmfBuffer&) = delete;
+  DtmfBuffer& operator=(const DtmfBuffer&) = delete;
+
   // Flushes the buffer.
   virtual void Flush();
 
@@ -97,8 +98,6 @@
   static bool CompareEvents(const DtmfEvent& a, const DtmfEvent& b);
 
   DtmfList buffer_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DtmfBuffer);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/dtmf_tone_generator.h b/modules/audio_coding/neteq/dtmf_tone_generator.h
index 968bc7f..35114f4 100644
--- a/modules/audio_coding/neteq/dtmf_tone_generator.h
+++ b/modules/audio_coding/neteq/dtmf_tone_generator.h
@@ -15,7 +15,6 @@
 #include <stdint.h>
 
 #include "modules/audio_coding/neteq/audio_multi_vector.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -29,6 +28,10 @@
 
   DtmfToneGenerator();
   virtual ~DtmfToneGenerator() {}
+
+  DtmfToneGenerator(const DtmfToneGenerator&) = delete;
+  DtmfToneGenerator& operator=(const DtmfToneGenerator&) = delete;
+
   virtual int Init(int fs, int event, int attenuation);
   virtual void Reset();
   virtual int Generate(size_t num_samples, AudioMultiVector* output);
@@ -48,8 +51,6 @@
   int amplitude_;               // Amplitude for this event.
   int16_t sample_history1_[2];  // Last 2 samples for the 1st oscillator.
   int16_t sample_history2_[2];  // Last 2 samples for the 2nd oscillator.
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DtmfToneGenerator);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/expand.h b/modules/audio_coding/neteq/expand.h
index 2d22b11..2e64583 100644
--- a/modules/audio_coding/neteq/expand.h
+++ b/modules/audio_coding/neteq/expand.h
@@ -15,7 +15,6 @@
 #include <memory>
 
 #include "modules/audio_coding/neteq/audio_vector.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -41,6 +40,9 @@
 
   virtual ~Expand();
 
+  Expand(const Expand&) = delete;
+  Expand& operator=(const Expand&) = delete;
+
   // Resets the object.
   virtual void Reset();
 
@@ -134,8 +136,6 @@
   bool stop_muting_;
   size_t expand_duration_samples_;
   std::unique_ptr<ChannelParameters[]> channel_parameters_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(Expand);
 };
 
 struct ExpandFactory {
diff --git a/modules/audio_coding/neteq/expand_uma_logger.h b/modules/audio_coding/neteq/expand_uma_logger.h
index 246aaff..a29d353 100644
--- a/modules/audio_coding/neteq/expand_uma_logger.h
+++ b/modules/audio_coding/neteq/expand_uma_logger.h
@@ -17,7 +17,6 @@
 
 #include "absl/types/optional.h"
 #include "api/neteq/tick_timer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -36,6 +35,9 @@
 
   ~ExpandUmaLogger();
 
+  ExpandUmaLogger(const ExpandUmaLogger&) = delete;
+  ExpandUmaLogger& operator=(const ExpandUmaLogger&) = delete;
+
   // In this call, value should be an incremental sample counter. The sample
   // rate must be strictly positive.
   void UpdateSampleCounter(uint64_t value, int sample_rate_hz);
@@ -48,8 +50,6 @@
   absl::optional<uint64_t> last_logged_value_;
   uint64_t last_value_ = 0;
   int sample_rate_hz_ = 0;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ExpandUmaLogger);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/merge.h b/modules/audio_coding/neteq/merge.h
index 13aa31d..2f27106 100644
--- a/modules/audio_coding/neteq/merge.h
+++ b/modules/audio_coding/neteq/merge.h
@@ -12,7 +12,6 @@
 #define MODULES_AUDIO_CODING_NETEQ_MERGE_H_
 
 #include "modules/audio_coding/neteq/audio_multi_vector.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -36,6 +35,9 @@
         SyncBuffer* sync_buffer);
   virtual ~Merge();
 
+  Merge(const Merge&) = delete;
+  Merge& operator=(const Merge&) = delete;
+
   // The main method to produce the audio data. The decoded data is supplied in
   // `input`, having `input_length` samples in total for all channels
   // (interleaved). The result is written to `output`. The number of channels
@@ -93,8 +95,6 @@
   int16_t input_downsampled_[kInputDownsampLength];
   AudioMultiVector expanded_;
   std::vector<int16_t> temp_data_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(Merge);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/neteq_impl.h b/modules/audio_coding/neteq/neteq_impl.h
index 2522e31..e2cd6c6 100644
--- a/modules/audio_coding/neteq/neteq_impl.h
+++ b/modules/audio_coding/neteq/neteq_impl.h
@@ -29,7 +29,6 @@
 #include "modules/audio_coding/neteq/packet.h"
 #include "modules/audio_coding/neteq/random_vector.h"
 #include "modules/audio_coding/neteq/statistics_calculator.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/thread_annotations.h"
 
@@ -124,6 +123,9 @@
 
   ~NetEqImpl() override;
 
+  NetEqImpl(const NetEqImpl&) = delete;
+  NetEqImpl& operator=(const NetEqImpl&) = delete;
+
   // Inserts a new packet into NetEq. Returns 0 on success, -1 on failure.
   int InsertPacket(const RTPHeader& rtp_header,
                    rtc::ArrayView<const uint8_t> payload) override;
@@ -399,9 +401,6 @@
   ExpandUmaLogger speech_expand_uma_logger_ RTC_GUARDED_BY(mutex_);
   bool no_time_stretching_ RTC_GUARDED_BY(mutex_);  // Only used for test.
   rtc::BufferT<int16_t> concealment_audio_ RTC_GUARDED_BY(mutex_);
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(NetEqImpl);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/normal.h b/modules/audio_coding/neteq/normal.h
index 3607208..772293b 100644
--- a/modules/audio_coding/neteq/normal.h
+++ b/modules/audio_coding/neteq/normal.h
@@ -17,7 +17,6 @@
 #include "api/neteq/neteq.h"
 #include "modules/audio_coding/neteq/statistics_calculator.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/numerics/safe_conversions.h"
 
 namespace webrtc {
@@ -49,6 +48,9 @@
 
   virtual ~Normal() {}
 
+  Normal(const Normal&) = delete;
+  Normal& operator=(const Normal&) = delete;
+
   // Performs the "Normal" operation. The decoder data is supplied in `input`,
   // having `length` samples in total for all channels (interleaved). The
   // result is written to `output`. The number of channels allocated in
@@ -68,8 +70,6 @@
   const size_t samples_per_ms_;
   const int16_t default_win_slope_Q14_;
   StatisticsCalculator* const statistics_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(Normal);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/packet_buffer.h b/modules/audio_coding/neteq/packet_buffer.h
index 20a0533..c6fb47f 100644
--- a/modules/audio_coding/neteq/packet_buffer.h
+++ b/modules/audio_coding/neteq/packet_buffer.h
@@ -15,7 +15,6 @@
 #include "modules/audio_coding/neteq/decoder_database.h"
 #include "modules/audio_coding/neteq/packet.h"
 #include "modules/include/module_common_types_public.h"  // IsNewerTimestamp
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -51,6 +50,9 @@
   // Deletes all packets in the buffer before destroying the buffer.
   virtual ~PacketBuffer();
 
+  PacketBuffer(const PacketBuffer&) = delete;
+  PacketBuffer& operator=(const PacketBuffer&) = delete;
+
   // Flushes the buffer and deletes all packets in it.
   virtual void Flush(StatisticsCalculator* stats);
 
@@ -173,7 +175,6 @@
   size_t max_number_of_packets_;
   PacketList buffer_;
   const TickTimer* tick_timer_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(PacketBuffer);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/post_decode_vad.h b/modules/audio_coding/neteq/post_decode_vad.h
index 3134d5f..3bd91b9 100644
--- a/modules/audio_coding/neteq/post_decode_vad.h
+++ b/modules/audio_coding/neteq/post_decode_vad.h
@@ -16,7 +16,6 @@
 
 #include "api/audio_codecs/audio_decoder.h"
 #include "common_audio/vad/include/webrtc_vad.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -31,6 +30,9 @@
 
   virtual ~PostDecodeVad();
 
+  PostDecodeVad(const PostDecodeVad&) = delete;
+  PostDecodeVad& operator=(const PostDecodeVad&) = delete;
+
   // Enables post-decode VAD.
   void Enable();
 
@@ -63,8 +65,6 @@
   bool active_speech_;
   int sid_interval_counter_;
   ::VadInst* vad_instance_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(PostDecodeVad);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/preemptive_expand.h b/modules/audio_coding/neteq/preemptive_expand.h
index 708ebfd..6338b99 100644
--- a/modules/audio_coding/neteq/preemptive_expand.h
+++ b/modules/audio_coding/neteq/preemptive_expand.h
@@ -15,7 +15,6 @@
 #include <stdint.h>
 
 #include "modules/audio_coding/neteq/time_stretch.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -36,6 +35,9 @@
         old_data_length_per_channel_(0),
         overlap_samples_(overlap_samples) {}
 
+  PreemptiveExpand(const PreemptiveExpand&) = delete;
+  PreemptiveExpand& operator=(const PreemptiveExpand&) = delete;
+
   // This method performs the actual PreemptiveExpand operation. The samples are
   // read from `input`, of length `input_length` elements, and are written to
   // `output`. The number of samples added through time-stretching is
@@ -67,8 +69,6 @@
  private:
   size_t old_data_length_per_channel_;
   size_t overlap_samples_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(PreemptiveExpand);
 };
 
 struct PreemptiveExpandFactory {
diff --git a/modules/audio_coding/neteq/random_vector.h b/modules/audio_coding/neteq/random_vector.h
index 1d37600..4a782f1 100644
--- a/modules/audio_coding/neteq/random_vector.h
+++ b/modules/audio_coding/neteq/random_vector.h
@@ -14,8 +14,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "rtc_base/constructor_magic.h"
-
 namespace webrtc {
 
 // This class generates pseudo-random samples.
@@ -26,6 +24,9 @@
 
   RandomVector() : seed_(777), seed_increment_(1) {}
 
+  RandomVector(const RandomVector&) = delete;
+  RandomVector& operator=(const RandomVector&) = delete;
+
   void Reset();
 
   void Generate(size_t length, int16_t* output);
@@ -39,8 +40,6 @@
  private:
   uint32_t seed_;
   int16_t seed_increment_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RandomVector);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/red_payload_splitter.h b/modules/audio_coding/neteq/red_payload_splitter.h
index 5566091..2f48e4b 100644
--- a/modules/audio_coding/neteq/red_payload_splitter.h
+++ b/modules/audio_coding/neteq/red_payload_splitter.h
@@ -12,7 +12,6 @@
 #define MODULES_AUDIO_CODING_NETEQ_RED_PAYLOAD_SPLITTER_H_
 
 #include "modules/audio_coding/neteq/packet.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -30,6 +29,9 @@
 
   virtual ~RedPayloadSplitter() {}
 
+  RedPayloadSplitter(const RedPayloadSplitter&) = delete;
+  RedPayloadSplitter& operator=(const RedPayloadSplitter&) = delete;
+
   // Splits each packet in `packet_list` into its separate RED payloads. Each
   // RED payload is packetized into a Packet. The original elements in
   // `packet_list` are properly deleted, and replaced by the new packets.
@@ -43,9 +45,6 @@
   // is accepted. Any packet with another payload type is discarded.
   virtual void CheckRedPayloads(PacketList* packet_list,
                                 const DecoderDatabase& decoder_database);
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(RedPayloadSplitter);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/statistics_calculator.h b/modules/audio_coding/neteq/statistics_calculator.h
index 5c3fb75..269e6a0 100644
--- a/modules/audio_coding/neteq/statistics_calculator.h
+++ b/modules/audio_coding/neteq/statistics_calculator.h
@@ -15,7 +15,6 @@
 #include <string>
 
 #include "api/neteq/neteq.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -28,6 +27,9 @@
 
   virtual ~StatisticsCalculator();
 
+  StatisticsCalculator(const StatisticsCalculator&) = delete;
+  StatisticsCalculator& operator=(const StatisticsCalculator&) = delete;
+
   // Resets most of the counters.
   void Reset();
 
@@ -197,8 +199,6 @@
   PeriodicUmaAverage excess_buffer_delay_;
   PeriodicUmaCount buffer_full_counter_;
   bool decoded_output_played_ = false;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(StatisticsCalculator);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/sync_buffer.h b/modules/audio_coding/neteq/sync_buffer.h
index 7d24730..cf56c43 100644
--- a/modules/audio_coding/neteq/sync_buffer.h
+++ b/modules/audio_coding/neteq/sync_buffer.h
@@ -20,7 +20,6 @@
 #include "modules/audio_coding/neteq/audio_multi_vector.h"
 #include "modules/audio_coding/neteq/audio_vector.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -32,6 +31,9 @@
         end_timestamp_(0),
         dtmf_index_(0) {}
 
+  SyncBuffer(const SyncBuffer&) = delete;
+  SyncBuffer& operator=(const SyncBuffer&) = delete;
+
   // Returns the number of samples yet to play out from the buffer.
   size_t FutureLength() const;
 
@@ -102,8 +104,6 @@
   size_t next_index_;
   uint32_t end_timestamp_;  // The timestamp of the last sample in the buffer.
   size_t dtmf_index_;       // Index to the first non-DTMF sample in the buffer.
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SyncBuffer);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/time_stretch.h b/modules/audio_coding/neteq/time_stretch.h
index 998d080..f0ddaeb 100644
--- a/modules/audio_coding/neteq/time_stretch.h
+++ b/modules/audio_coding/neteq/time_stretch.h
@@ -14,7 +14,6 @@
 #include <string.h>  // memset, size_t
 
 #include "modules/audio_coding/neteq/audio_multi_vector.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -49,6 +48,9 @@
 
   virtual ~TimeStretch() {}
 
+  TimeStretch(const TimeStretch&) = delete;
+  TimeStretch& operator=(const TimeStretch&) = delete;
+
   // This method performs the processing common to both Accelerate and
   // PreemptiveExpand.
   ReturnCodes Process(const int16_t* input,
@@ -105,8 +107,6 @@
                        int32_t vec2_energy,
                        size_t peak_index,
                        int scaling) const;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(TimeStretch);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/timestamp_scaler.h b/modules/audio_coding/neteq/timestamp_scaler.h
index 4d578fc..f42ce72 100644
--- a/modules/audio_coding/neteq/timestamp_scaler.h
+++ b/modules/audio_coding/neteq/timestamp_scaler.h
@@ -12,7 +12,6 @@
 #define MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_
 
 #include "modules/audio_coding/neteq/packet.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -34,6 +33,9 @@
 
   virtual ~TimestampScaler() {}
 
+  TimestampScaler(const TimestampScaler&) = delete;
+  TimestampScaler& operator=(const TimestampScaler&) = delete;
+
   // Start over.
   virtual void Reset();
 
@@ -59,8 +61,6 @@
   uint32_t external_ref_;
   uint32_t internal_ref_;
   const DecoderDatabase& decoder_database_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(TimestampScaler);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/tools/audio_checksum.h b/modules/audio_coding/neteq/tools/audio_checksum.h
index e4306fa..9d6f343 100644
--- a/modules/audio_coding/neteq/tools/audio_checksum.h
+++ b/modules/audio_coding/neteq/tools/audio_checksum.h
@@ -16,7 +16,6 @@
 
 #include "modules/audio_coding/neteq/tools/audio_sink.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/message_digest.h"
 #include "rtc_base/string_encode.h"
 #include "rtc_base/system/arch.h"
@@ -31,6 +30,9 @@
         checksum_result_(checksum_->Size()),
         finished_(false) {}
 
+  AudioChecksum(const AudioChecksum&) = delete;
+  AudioChecksum& operator=(const AudioChecksum&) = delete;
+
   bool WriteArray(const int16_t* audio, size_t num_samples) override {
     if (finished_)
       return false;
@@ -56,8 +58,6 @@
   std::unique_ptr<rtc::MessageDigest> checksum_;
   rtc::Buffer checksum_result_;
   bool finished_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioChecksum);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/audio_loop.h b/modules/audio_coding/neteq/tools/audio_loop.h
index 25da463..a73be2d 100644
--- a/modules/audio_coding/neteq/tools/audio_loop.h
+++ b/modules/audio_coding/neteq/tools/audio_loop.h
@@ -15,7 +15,6 @@
 #include <string>
 
 #include "api/array_view.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace test {
@@ -29,6 +28,9 @@
 
   virtual ~AudioLoop() {}
 
+  AudioLoop(const AudioLoop&) = delete;
+  AudioLoop& operator=(const AudioLoop&) = delete;
+
   // Initializes the AudioLoop by reading from `file_name`. The loop will be no
   // longer than `max_loop_length_samples`, if the length of the file is
   // greater. Otherwise, the loop length is the same as the file length.
@@ -47,8 +49,6 @@
   size_t loop_length_samples_;
   size_t block_length_samples_;
   std::unique_ptr<int16_t[]> audio_array_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioLoop);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/audio_sink.h b/modules/audio_coding/neteq/tools/audio_sink.h
index cd6733b..53729fa 100644
--- a/modules/audio_coding/neteq/tools/audio_sink.h
+++ b/modules/audio_coding/neteq/tools/audio_sink.h
@@ -12,7 +12,6 @@
 #define MODULES_AUDIO_CODING_NETEQ_TOOLS_AUDIO_SINK_H_
 
 #include "api/audio/audio_frame.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace test {
@@ -24,6 +23,9 @@
   AudioSink() {}
   virtual ~AudioSink() {}
 
+  AudioSink(const AudioSink&) = delete;
+  AudioSink& operator=(const AudioSink&) = delete;
+
   // Writes `num_samples` from `audio` to the AudioSink. Returns true if
   // successful, otherwise false.
   virtual bool WriteArray(const int16_t* audio, size_t num_samples) = 0;
@@ -34,9 +36,6 @@
     return WriteArray(audio_frame.data(), audio_frame.samples_per_channel_ *
                                               audio_frame.num_channels_);
   }
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioSink);
 };
 
 // Forks the output audio to two AudioSink objects.
@@ -45,23 +44,25 @@
   AudioSinkFork(AudioSink* left, AudioSink* right)
       : left_sink_(left), right_sink_(right) {}
 
+  AudioSinkFork(const AudioSinkFork&) = delete;
+  AudioSinkFork& operator=(const AudioSinkFork&) = delete;
+
   bool WriteArray(const int16_t* audio, size_t num_samples) override;
 
  private:
   AudioSink* left_sink_;
   AudioSink* right_sink_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioSinkFork);
 };
 
 // An AudioSink implementation that does nothing.
 class VoidAudioSink : public AudioSink {
  public:
   VoidAudioSink() = default;
-  bool WriteArray(const int16_t* audio, size_t num_samples) override;
 
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(VoidAudioSink);
+  VoidAudioSink(const VoidAudioSink&) = delete;
+  VoidAudioSink& operator=(const VoidAudioSink&) = delete;
+
+  bool WriteArray(const int16_t* audio, size_t num_samples) override;
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/constant_pcm_packet_source.h b/modules/audio_coding/neteq/tools/constant_pcm_packet_source.h
index 6a79ce4..ab4f5c2 100644
--- a/modules/audio_coding/neteq/tools/constant_pcm_packet_source.h
+++ b/modules/audio_coding/neteq/tools/constant_pcm_packet_source.h
@@ -16,7 +16,6 @@
 #include <string>
 
 #include "modules/audio_coding/neteq/tools/packet_source.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace test {
@@ -31,6 +30,9 @@
                           int sample_rate_hz,
                           int payload_type);
 
+  ConstantPcmPacketSource(const ConstantPcmPacketSource&) = delete;
+  ConstantPcmPacketSource& operator=(const ConstantPcmPacketSource&) = delete;
+
   std::unique_ptr<Packet> NextPacket() override;
 
  private:
@@ -46,8 +48,6 @@
   uint16_t seq_number_;
   uint32_t timestamp_;
   const uint32_t payload_ssrc_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ConstantPcmPacketSource);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/input_audio_file.h b/modules/audio_coding/neteq/tools/input_audio_file.h
index 010d8cc..c6e65a0 100644
--- a/modules/audio_coding/neteq/tools/input_audio_file.h
+++ b/modules/audio_coding/neteq/tools/input_audio_file.h
@@ -15,8 +15,6 @@
 
 #include <string>
 
-#include "rtc_base/constructor_magic.h"
-
 namespace webrtc {
 namespace test {
 
@@ -27,6 +25,9 @@
 
   virtual ~InputAudioFile();
 
+  InputAudioFile(const InputAudioFile&) = delete;
+  InputAudioFile& operator=(const InputAudioFile&) = delete;
+
   // Reads `samples` elements from source file to `destination`. Returns true
   // if the read was successful, otherwise false. If the file end is reached,
   // the file is rewound and reading continues from the beginning.
@@ -52,7 +53,6 @@
  private:
   FILE* fp_;
   const bool loop_at_end_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(InputAudioFile);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/output_audio_file.h b/modules/audio_coding/neteq/tools/output_audio_file.h
index ad97722..491cbd0 100644
--- a/modules/audio_coding/neteq/tools/output_audio_file.h
+++ b/modules/audio_coding/neteq/tools/output_audio_file.h
@@ -16,7 +16,6 @@
 #include <string>
 
 #include "modules/audio_coding/neteq/tools/audio_sink.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace test {
@@ -34,6 +33,9 @@
       fclose(out_file_);
   }
 
+  OutputAudioFile(const OutputAudioFile&) = delete;
+  OutputAudioFile& operator=(const OutputAudioFile&) = delete;
+
   bool WriteArray(const int16_t* audio, size_t num_samples) override {
     RTC_DCHECK(out_file_);
     return fwrite(audio, sizeof(*audio), num_samples, out_file_) == num_samples;
@@ -41,8 +43,6 @@
 
  private:
   FILE* out_file_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(OutputAudioFile);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/output_wav_file.h b/modules/audio_coding/neteq/tools/output_wav_file.h
index ae2e970..1485f4e 100644
--- a/modules/audio_coding/neteq/tools/output_wav_file.h
+++ b/modules/audio_coding/neteq/tools/output_wav_file.h
@@ -15,7 +15,6 @@
 
 #include "common_audio/wav_file.h"
 #include "modules/audio_coding/neteq/tools/audio_sink.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace test {
@@ -29,6 +28,9 @@
                 int num_channels = 1)
       : wav_writer_(file_name, sample_rate_hz, num_channels) {}
 
+  OutputWavFile(const OutputWavFile&) = delete;
+  OutputWavFile& operator=(const OutputWavFile&) = delete;
+
   bool WriteArray(const int16_t* audio, size_t num_samples) override {
     wav_writer_.WriteSamples(audio, num_samples);
     return true;
@@ -36,8 +38,6 @@
 
  private:
   WavWriter wav_writer_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(OutputWavFile);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/packet.h b/modules/audio_coding/neteq/tools/packet.h
index 92e5ee9..9671090 100644
--- a/modules/audio_coding/neteq/tools/packet.h
+++ b/modules/audio_coding/neteq/tools/packet.h
@@ -16,7 +16,6 @@
 #include "api/array_view.h"
 #include "api/rtp_headers.h"
 #include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/copy_on_write_buffer.h"
 
 namespace webrtc {
@@ -54,6 +53,9 @@
 
   virtual ~Packet();
 
+  Packet(const Packet&) = delete;
+  Packet& operator=(const Packet&) = delete;
+
   // Parses the first bytes of the RTP payload, interpreting them as RED headers
   // according to RFC 2198. The headers will be inserted into `headers`. The
   // caller of the method assumes ownership of the objects in the list, and
@@ -95,8 +97,6 @@
   size_t virtual_payload_length_bytes_ = 0;
   const double time_ms_;     // Used to denote a packet's arrival time.
   const bool valid_header_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(Packet);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/packet_source.h b/modules/audio_coding/neteq/tools/packet_source.h
index 975680f..be1705c 100644
--- a/modules/audio_coding/neteq/tools/packet_source.h
+++ b/modules/audio_coding/neteq/tools/packet_source.h
@@ -15,7 +15,6 @@
 #include <memory>
 
 #include "modules/audio_coding/neteq/tools/packet.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace test {
@@ -26,6 +25,9 @@
   PacketSource();
   virtual ~PacketSource();
 
+  PacketSource(const PacketSource&) = delete;
+  PacketSource& operator=(const PacketSource&) = delete;
+
   // Returns next packet. Returns nullptr if the source is depleted, or if an
   // error occurred.
   virtual std::unique_ptr<Packet> NextPacket() = 0;
@@ -34,9 +36,6 @@
 
  protected:
   std::bitset<128> filter_;  // Payload type is 7 bits in the RFC.
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(PacketSource);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/resample_input_audio_file.h b/modules/audio_coding/neteq/tools/resample_input_audio_file.h
index 9106d5b..497a410 100644
--- a/modules/audio_coding/neteq/tools/resample_input_audio_file.h
+++ b/modules/audio_coding/neteq/tools/resample_input_audio_file.h
@@ -15,7 +15,6 @@
 
 #include "common_audio/resampler/include/resampler.h"
 #include "modules/audio_coding/neteq/tools/input_audio_file.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace test {
@@ -37,6 +36,9 @@
         file_rate_hz_(file_rate_hz),
         output_rate_hz_(output_rate_hz) {}
 
+  ResampleInputAudioFile(const ResampleInputAudioFile&) = delete;
+  ResampleInputAudioFile& operator=(const ResampleInputAudioFile&) = delete;
+
   bool Read(size_t samples, int output_rate_hz, int16_t* destination);
   bool Read(size_t samples, int16_t* destination) override;
   void set_output_rate_hz(int rate_hz);
@@ -45,7 +47,6 @@
   const int file_rate_hz_;
   int output_rate_hz_;
   Resampler resampler_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(ResampleInputAudioFile);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/rtc_event_log_source.h b/modules/audio_coding/neteq/tools/rtc_event_log_source.h
index d4be2a7..e2d0f61 100644
--- a/modules/audio_coding/neteq/tools/rtc_event_log_source.h
+++ b/modules/audio_coding/neteq/tools/rtc_event_log_source.h
@@ -19,7 +19,6 @@
 #include "logging/rtc_event_log/rtc_event_log_parser.h"
 #include "modules/audio_coding/neteq/tools/packet_source.h"
 #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -43,6 +42,9 @@
 
   virtual ~RtcEventLogSource();
 
+  RtcEventLogSource(const RtcEventLogSource&) = delete;
+  RtcEventLogSource& operator=(const RtcEventLogSource&) = delete;
+
   std::unique_ptr<Packet> NextPacket() override;
 
   // Returns the timestamp of the next audio output event, in milliseconds. The
@@ -60,8 +62,6 @@
   size_t rtp_packet_index_ = 0;
   std::vector<int64_t> audio_outputs_;
   size_t audio_output_index_ = 0;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtcEventLogSource);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/rtp_file_source.h b/modules/audio_coding/neteq/tools/rtp_file_source.h
index d6aab24..7e284ac 100644
--- a/modules/audio_coding/neteq/tools/rtp_file_source.h
+++ b/modules/audio_coding/neteq/tools/rtp_file_source.h
@@ -19,7 +19,6 @@
 #include "absl/types/optional.h"
 #include "modules/audio_coding/neteq/tools/packet_source.h"
 #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -41,6 +40,9 @@
 
   ~RtpFileSource() override;
 
+  RtpFileSource(const RtpFileSource&) = delete;
+  RtpFileSource& operator=(const RtpFileSource&) = delete;
+
   // Registers an RTP header extension and binds it to `id`.
   virtual bool RegisterRtpHeaderExtension(RTPExtensionType type, uint8_t id);
 
@@ -58,8 +60,6 @@
   std::unique_ptr<RtpFileReader> rtp_reader_;
   const absl::optional<uint32_t> ssrc_filter_;
   RtpHeaderExtensionMap rtp_header_extension_map_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtpFileSource);
 };
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/rtp_generator.h b/modules/audio_coding/neteq/tools/rtp_generator.h
index 6ca6e1b..2e615ad 100644
--- a/modules/audio_coding/neteq/tools/rtp_generator.h
+++ b/modules/audio_coding/neteq/tools/rtp_generator.h
@@ -12,7 +12,6 @@
 #define MODULES_AUDIO_CODING_NETEQ_TOOLS_RTP_GENERATOR_H_
 
 #include "api/rtp_headers.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace test {
@@ -34,6 +33,9 @@
 
   virtual ~RtpGenerator() {}
 
+  RtpGenerator(const RtpGenerator&) = delete;
+  RtpGenerator& operator=(const RtpGenerator&) = delete;
+
   // Writes the next RTP header to `rtp_header`, which will be of type
   // `payload_type`. Returns the send time for this packet (in ms). The value of
   // `payload_length_samples` determines the send time for the next packet.
@@ -50,9 +52,6 @@
   const uint32_t ssrc_;
   const int samples_per_ms_;
   double drift_factor_;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtpGenerator);
 };
 
 class TimestampJumpRtpGenerator : public RtpGenerator {
@@ -66,6 +65,10 @@
         jump_from_timestamp_(jump_from_timestamp),
         jump_to_timestamp_(jump_to_timestamp) {}
 
+  TimestampJumpRtpGenerator(const TimestampJumpRtpGenerator&) = delete;
+  TimestampJumpRtpGenerator& operator=(const TimestampJumpRtpGenerator&) =
+      delete;
+
   uint32_t GetRtpHeader(uint8_t payload_type,
                         size_t payload_length_samples,
                         RTPHeader* rtp_header) override;
@@ -73,7 +76,6 @@
  private:
   uint32_t jump_from_timestamp_;
   uint32_t jump_to_timestamp_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(TimestampJumpRtpGenerator);
 };
 
 }  // namespace test
diff --git a/modules/audio_mixer/audio_mixer_impl.h b/modules/audio_mixer/audio_mixer_impl.h
index 737fcbd..76b1131 100644
--- a/modules/audio_mixer/audio_mixer_impl.h
+++ b/modules/audio_mixer/audio_mixer_impl.h
@@ -22,7 +22,6 @@
 #include "api/scoped_refptr.h"
 #include "modules/audio_mixer/frame_combiner.h"
 #include "modules/audio_mixer/output_rate_calculator.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/race_checker.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/thread_annotations.h"
@@ -48,6 +47,9 @@
 
   ~AudioMixerImpl() override;
 
+  AudioMixerImpl(const AudioMixerImpl&) = delete;
+  AudioMixerImpl& operator=(const AudioMixerImpl&) = delete;
+
   // AudioMixer functions
   bool AddSource(Source* audio_source) override;
   void RemoveSource(Source* audio_source) override;
@@ -92,8 +94,6 @@
 
   // Component that handles actual adding of audio frames.
   FrameCombiner frame_combiner_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AudioMixerImpl);
 };
 }  // namespace webrtc
 
diff --git a/modules/audio_processing/aec3/aec3_fft.h b/modules/audio_processing/aec3/aec3_fft.h
index 6f7fbe4..c68de53 100644
--- a/modules/audio_processing/aec3/aec3_fft.h
+++ b/modules/audio_processing/aec3/aec3_fft.h
@@ -18,7 +18,6 @@
 #include "modules/audio_processing/aec3/aec3_common.h"
 #include "modules/audio_processing/aec3/fft_data.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -30,6 +29,9 @@
 
   Aec3Fft();
 
+  Aec3Fft(const Aec3Fft&) = delete;
+  Aec3Fft& operator=(const Aec3Fft&) = delete;
+
   // Computes the FFT. Note that both the input and output are modified.
   void Fft(std::array<float, kFftLength>* x, FftData* X) const {
     RTC_DCHECK(x);
@@ -66,8 +68,6 @@
 
  private:
   const OouraFft ooura_fft_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(Aec3Fft);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec3/block_processor_metrics.h b/modules/audio_processing/aec3/block_processor_metrics.h
index 4ba0536..a70d0da 100644
--- a/modules/audio_processing/aec3/block_processor_metrics.h
+++ b/modules/audio_processing/aec3/block_processor_metrics.h
@@ -11,8 +11,6 @@
 #ifndef MODULES_AUDIO_PROCESSING_AEC3_BLOCK_PROCESSOR_METRICS_H_
 #define MODULES_AUDIO_PROCESSING_AEC3_BLOCK_PROCESSOR_METRICS_H_
 
-#include "rtc_base/constructor_magic.h"
-
 namespace webrtc {
 
 // Handles the reporting of metrics for the block_processor.
@@ -20,6 +18,9 @@
  public:
   BlockProcessorMetrics() = default;
 
+  BlockProcessorMetrics(const BlockProcessorMetrics&) = delete;
+  BlockProcessorMetrics& operator=(const BlockProcessorMetrics&) = delete;
+
   // Updates the metric with new capture data.
   void UpdateCapture(bool underrun);
 
@@ -38,8 +39,6 @@
   int render_buffer_underruns_ = 0;
   int render_buffer_overruns_ = 0;
   int buffer_render_calls_ = 0;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(BlockProcessorMetrics);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec3/decimator.h b/modules/audio_processing/aec3/decimator.h
index 3ccd292..dbff3d9 100644
--- a/modules/audio_processing/aec3/decimator.h
+++ b/modules/audio_processing/aec3/decimator.h
@@ -17,7 +17,6 @@
 #include "api/array_view.h"
 #include "modules/audio_processing/aec3/aec3_common.h"
 #include "modules/audio_processing/utility/cascaded_biquad_filter.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -26,6 +25,9 @@
  public:
   explicit Decimator(size_t down_sampling_factor);
 
+  Decimator(const Decimator&) = delete;
+  Decimator& operator=(const Decimator&) = delete;
+
   // Downsamples the signal.
   void Decimate(rtc::ArrayView<const float> in, rtc::ArrayView<float> out);
 
@@ -33,8 +35,6 @@
   const size_t down_sampling_factor_;
   CascadedBiQuadFilter anti_aliasing_filter_;
   CascadedBiQuadFilter noise_reduction_filter_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(Decimator);
 };
 }  // namespace webrtc
 
diff --git a/modules/audio_processing/aec3/echo_path_delay_estimator.h b/modules/audio_processing/aec3/echo_path_delay_estimator.h
index 6c8c212..d8f9775 100644
--- a/modules/audio_processing/aec3/echo_path_delay_estimator.h
+++ b/modules/audio_processing/aec3/echo_path_delay_estimator.h
@@ -21,7 +21,6 @@
 #include "modules/audio_processing/aec3/delay_estimate.h"
 #include "modules/audio_processing/aec3/matched_filter.h"
 #include "modules/audio_processing/aec3/matched_filter_lag_aggregator.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -37,6 +36,9 @@
                          size_t num_capture_channels);
   ~EchoPathDelayEstimator();
 
+  EchoPathDelayEstimator(const EchoPathDelayEstimator&) = delete;
+  EchoPathDelayEstimator& operator=(const EchoPathDelayEstimator&) = delete;
+
   // Resets the estimation. If the delay confidence is reset, the reset behavior
   // is as if the call is restarted.
   void Reset(bool reset_delay_confidence);
@@ -71,8 +73,6 @@
 
   // Internal reset method with more granularity.
   void Reset(bool reset_lag_aggregator, bool reset_delay_confidence);
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(EchoPathDelayEstimator);
 };
 }  // namespace webrtc
 
diff --git a/modules/audio_processing/aec3/echo_remover_metrics.h b/modules/audio_processing/aec3/echo_remover_metrics.h
index c3d8e20..aec8084 100644
--- a/modules/audio_processing/aec3/echo_remover_metrics.h
+++ b/modules/audio_processing/aec3/echo_remover_metrics.h
@@ -15,7 +15,6 @@
 
 #include "modules/audio_processing/aec3/aec3_common.h"
 #include "modules/audio_processing/aec3/aec_state.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -34,6 +33,9 @@
 
   EchoRemoverMetrics();
 
+  EchoRemoverMetrics(const EchoRemoverMetrics&) = delete;
+  EchoRemoverMetrics& operator=(const EchoRemoverMetrics&) = delete;
+
   // Updates the metric with new data.
   void Update(
       const AecState& aec_state,
@@ -52,8 +54,6 @@
   DbMetric erle_time_domain_;
   bool saturated_capture_ = false;
   bool metrics_reported_ = false;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(EchoRemoverMetrics);
 };
 
 namespace aec3 {
diff --git a/modules/audio_processing/aec3/erl_estimator.h b/modules/audio_processing/aec3/erl_estimator.h
index 89bf6ac..639a52c 100644
--- a/modules/audio_processing/aec3/erl_estimator.h
+++ b/modules/audio_processing/aec3/erl_estimator.h
@@ -18,7 +18,6 @@
 
 #include "api/array_view.h"
 #include "modules/audio_processing/aec3/aec3_common.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -28,6 +27,9 @@
   explicit ErlEstimator(size_t startup_phase_length_blocks_);
   ~ErlEstimator();
 
+  ErlEstimator(const ErlEstimator&) = delete;
+  ErlEstimator& operator=(const ErlEstimator&) = delete;
+
   // Resets the ERL estimation.
   void Reset();
 
@@ -49,7 +51,6 @@
   float erl_time_domain_;
   int hold_counter_time_domain_;
   size_t blocks_since_reset_ = 0;
-  RTC_DISALLOW_COPY_AND_ASSIGN(ErlEstimator);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec3/render_delay_controller_metrics.h b/modules/audio_processing/aec3/render_delay_controller_metrics.h
index 8c527a1..309122d 100644
--- a/modules/audio_processing/aec3/render_delay_controller_metrics.h
+++ b/modules/audio_processing/aec3/render_delay_controller_metrics.h
@@ -15,7 +15,6 @@
 
 #include "absl/types/optional.h"
 #include "modules/audio_processing/aec3/clockdrift_detector.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -24,6 +23,10 @@
  public:
   RenderDelayControllerMetrics();
 
+  RenderDelayControllerMetrics(const RenderDelayControllerMetrics&) = delete;
+  RenderDelayControllerMetrics& operator=(const RenderDelayControllerMetrics&) =
+      delete;
+
   // Updates the metric with new data.
   void Update(absl::optional<size_t> delay_samples,
               size_t buffer_delay_blocks,
@@ -46,8 +49,6 @@
   bool metrics_reported_ = false;
   bool initial_update = true;
   int skew_shift_count_ = 0;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RenderDelayControllerMetrics);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec3/render_signal_analyzer.h b/modules/audio_processing/aec3/render_signal_analyzer.h
index c7a3d8b..2e4aaa4 100644
--- a/modules/audio_processing/aec3/render_signal_analyzer.h
+++ b/modules/audio_processing/aec3/render_signal_analyzer.h
@@ -20,7 +20,6 @@
 #include "modules/audio_processing/aec3/aec3_common.h"
 #include "modules/audio_processing/aec3/render_buffer.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -30,6 +29,9 @@
   explicit RenderSignalAnalyzer(const EchoCanceller3Config& config);
   ~RenderSignalAnalyzer();
 
+  RenderSignalAnalyzer(const RenderSignalAnalyzer&) = delete;
+  RenderSignalAnalyzer& operator=(const RenderSignalAnalyzer&) = delete;
+
   // Updates the render signal analysis with the most recent render signal.
   void Update(const RenderBuffer& render_buffer,
               const absl::optional<size_t>& delay_partitions);
@@ -53,8 +55,6 @@
   std::array<size_t, kFftLengthBy2 - 1> narrow_band_counters_;
   absl::optional<int> narrow_peak_band_;
   size_t narrow_peak_counter_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RenderSignalAnalyzer);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec3/suppression_filter.h b/modules/audio_processing/aec3/suppression_filter.h
index dcf2292..375bfda 100644
--- a/modules/audio_processing/aec3/suppression_filter.h
+++ b/modules/audio_processing/aec3/suppression_filter.h
@@ -17,7 +17,6 @@
 #include "modules/audio_processing/aec3/aec3_common.h"
 #include "modules/audio_processing/aec3/aec3_fft.h"
 #include "modules/audio_processing/aec3/fft_data.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -27,6 +26,10 @@
                     int sample_rate_hz,
                     size_t num_capture_channels_);
   ~SuppressionFilter();
+
+  SuppressionFilter(const SuppressionFilter&) = delete;
+  SuppressionFilter& operator=(const SuppressionFilter&) = delete;
+
   void ApplyGain(rtc::ArrayView<const FftData> comfort_noise,
                  rtc::ArrayView<const FftData> comfort_noise_high_bands,
                  const std::array<float, kFftLengthBy2Plus1>& suppression_gain,
@@ -40,7 +43,6 @@
   const size_t num_capture_channels_;
   const Aec3Fft fft_;
   std::vector<std::vector<std::array<float, kFftLengthBy2>>> e_output_old_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(SuppressionFilter);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec3/suppression_gain.h b/modules/audio_processing/aec3/suppression_gain.h
index 7c4a1c9..c8e13f7 100644
--- a/modules/audio_processing/aec3/suppression_gain.h
+++ b/modules/audio_processing/aec3/suppression_gain.h
@@ -25,7 +25,6 @@
 #include "modules/audio_processing/aec3/nearend_detector.h"
 #include "modules/audio_processing/aec3/render_signal_analyzer.h"
 #include "modules/audio_processing/logging/apm_data_dumper.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -36,6 +35,10 @@
                   int sample_rate_hz,
                   size_t num_capture_channels);
   ~SuppressionGain();
+
+  SuppressionGain(const SuppressionGain&) = delete;
+  SuppressionGain& operator=(const SuppressionGain&) = delete;
+
   void GetGain(
       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>>
           nearend_spectrum,
@@ -134,8 +137,6 @@
   // echo spectrum.
   const bool use_unbounded_echo_spectrum_;
   std::unique_ptr<NearendDetector> dominant_nearend_detector_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SuppressionGain);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/agc2/fixed_digital_level_estimator.h b/modules/audio_processing/agc2/fixed_digital_level_estimator.h
index d96aeda..d26b559 100644
--- a/modules/audio_processing/agc2/fixed_digital_level_estimator.h
+++ b/modules/audio_processing/agc2/fixed_digital_level_estimator.h
@@ -16,7 +16,6 @@
 
 #include "modules/audio_processing/agc2/agc2_common.h"
 #include "modules/audio_processing/include/audio_frame_view.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -34,6 +33,10 @@
   FixedDigitalLevelEstimator(int sample_rate_hz,
                              ApmDataDumper* apm_data_dumper);
 
+  FixedDigitalLevelEstimator(const FixedDigitalLevelEstimator&) = delete;
+  FixedDigitalLevelEstimator& operator=(const FixedDigitalLevelEstimator&) =
+      delete;
+
   // The input is assumed to be in FloatS16 format. Scaled input will
   // produce similarly scaled output. A frame of with kFrameDurationMs
   // ms of audio produces a level estimates in the same scale. The
@@ -57,8 +60,6 @@
   float filter_state_level_;
   int samples_in_frame_;
   int samples_in_sub_frame_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(FixedDigitalLevelEstimator);
 };
 }  // namespace webrtc
 
diff --git a/modules/audio_processing/agc2/interpolated_gain_curve.h b/modules/audio_processing/agc2/interpolated_gain_curve.h
index af99320..b1a5cf4 100644
--- a/modules/audio_processing/agc2/interpolated_gain_curve.h
+++ b/modules/audio_processing/agc2/interpolated_gain_curve.h
@@ -15,7 +15,6 @@
 #include <string>
 
 #include "modules/audio_processing/agc2/agc2_common.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/gtest_prod_util.h"
 #include "system_wrappers/include/metrics.h"
 
@@ -64,6 +63,9 @@
                         const std::string& histogram_name_prefix);
   ~InterpolatedGainCurve();
 
+  InterpolatedGainCurve(const InterpolatedGainCurve&) = delete;
+  InterpolatedGainCurve& operator=(const InterpolatedGainCurve&) = delete;
+
   Stats get_stats() const { return stats_; }
 
   // Given a non-negative input level (linear scale), a scalar factor to apply
@@ -143,8 +145,6 @@
 
   // Stats.
   mutable Stats stats_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(InterpolatedGainCurve);
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/echo_control_mobile_impl.cc b/modules/audio_processing/echo_control_mobile_impl.cc
index 667d6bf..fa5cb8f 100644
--- a/modules/audio_processing/echo_control_mobile_impl.cc
+++ b/modules/audio_processing/echo_control_mobile_impl.cc
@@ -18,7 +18,6 @@
 #include "modules/audio_processing/audio_buffer.h"
 #include "modules/audio_processing/include/audio_processing.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -85,6 +84,9 @@
     WebRtcAecm_Free(state_);
   }
 
+  Canceller(const Canceller&) = delete;
+  Canceller& operator=(const Canceller&) = delete;
+
   void* state() {
     RTC_DCHECK(state_);
     return state_;
@@ -98,7 +100,6 @@
 
  private:
   void* state_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(Canceller);
 };
 
 EchoControlMobileImpl::EchoControlMobileImpl()
diff --git a/modules/audio_processing/test/conversational_speech/multiend_call.h b/modules/audio_processing/test/conversational_speech/multiend_call.h
index 5b6300f..693f00e 100644
--- a/modules/audio_processing/test/conversational_speech/multiend_call.h
+++ b/modules/audio_processing/test/conversational_speech/multiend_call.h
@@ -24,7 +24,6 @@
 #include "modules/audio_processing/test/conversational_speech/timing.h"
 #include "modules/audio_processing/test/conversational_speech/wavreader_abstract_factory.h"
 #include "modules/audio_processing/test/conversational_speech/wavreader_interface.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace test {
@@ -57,6 +56,9 @@
       std::unique_ptr<WavReaderAbstractFactory> wavreader_abstract_factory);
   ~MultiEndCall();
 
+  MultiEndCall(const MultiEndCall&) = delete;
+  MultiEndCall& operator=(const MultiEndCall&) = delete;
+
   const std::set<std::string>& speaker_names() const { return speaker_names_; }
   const std::map<std::string, std::unique_ptr<WavReaderInterface>>&
   audiotrack_readers() const {
@@ -92,8 +94,6 @@
   int sample_rate_hz_;
   size_t total_duration_samples_;
   std::vector<SpeakingTurn> speaking_turns_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(MultiEndCall);
 };
 
 }  // namespace conversational_speech
diff --git a/modules/audio_processing/test/test_utils.h b/modules/audio_processing/test/test_utils.h
index 30674cb..aa13211 100644
--- a/modules/audio_processing/test/test_utils.h
+++ b/modules/audio_processing/test/test_utils.h
@@ -23,7 +23,6 @@
 #include "common_audio/channel_buffer.h"
 #include "common_audio/wav_file.h"
 #include "modules/audio_processing/include/audio_processing.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -35,13 +34,14 @@
   explicit RawFile(const std::string& filename);
   ~RawFile();
 
+  RawFile(const RawFile&) = delete;
+  RawFile& operator=(const RawFile&) = delete;
+
   void WriteSamples(const int16_t* samples, size_t num_samples);
   void WriteSamples(const float* samples, size_t num_samples);
 
  private:
   FILE* file_handle_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RawFile);
 };
 
 // Encapsulates samples and metadata for an integer frame.
@@ -78,6 +78,9 @@
   explicit ChannelBufferWavReader(std::unique_ptr<WavReader> file);
   ~ChannelBufferWavReader();
 
+  ChannelBufferWavReader(const ChannelBufferWavReader&) = delete;
+  ChannelBufferWavReader& operator=(const ChannelBufferWavReader&) = delete;
+
   // Reads data from the file according to the `buffer` format. Returns false if
   // a full buffer can't be read from the file.
   bool Read(ChannelBuffer<float>* buffer);
@@ -85,8 +88,6 @@
  private:
   std::unique_ptr<WavReader> file_;
   std::vector<float> interleaved_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ChannelBufferWavReader);
 };
 
 // Writes ChannelBuffers to a provided WavWriter.
@@ -95,13 +96,14 @@
   explicit ChannelBufferWavWriter(std::unique_ptr<WavWriter> file);
   ~ChannelBufferWavWriter();
 
+  ChannelBufferWavWriter(const ChannelBufferWavWriter&) = delete;
+  ChannelBufferWavWriter& operator=(const ChannelBufferWavWriter&) = delete;
+
   void Write(const ChannelBuffer<float>& buffer);
 
  private:
   std::unique_ptr<WavWriter> file_;
   std::vector<float> interleaved_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ChannelBufferWavWriter);
 };
 
 // Takes a pointer to a vector. Allows appending the samples of channel buffers
diff --git a/modules/congestion_controller/goog_cc/delay_based_bwe_unittest_helper.h b/modules/congestion_controller/goog_cc/delay_based_bwe_unittest_helper.h
index 927cf9b..474d297 100644
--- a/modules/congestion_controller/goog_cc/delay_based_bwe_unittest_helper.h
+++ b/modules/congestion_controller/goog_cc/delay_based_bwe_unittest_helper.h
@@ -22,7 +22,6 @@
 #include "api/transport/network_types.h"
 #include "modules/congestion_controller/goog_cc/acknowledged_bitrate_estimator.h"
 #include "modules/congestion_controller/goog_cc/delay_based_bwe.h"
-#include "rtc_base/constructor_magic.h"
 #include "system_wrappers/include/clock.h"
 #include "test/field_trial.h"
 #include "test/gtest.h"
@@ -54,6 +53,9 @@
 
   RtpStream(int fps, int bitrate_bps);
 
+  RtpStream(const RtpStream&) = delete;
+  RtpStream& operator=(const RtpStream&) = delete;
+
   // Generates a new frame for this stream. If called too soon after the
   // previous frame, no frame will be generated. The frame is split into
   // packets.
@@ -74,8 +76,6 @@
   int fps_;
   int bitrate_bps_;
   int64_t next_rtp_time_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtpStream);
 };
 
 class StreamGenerator {
@@ -83,6 +83,9 @@
   StreamGenerator(int capacity, int64_t time_now);
   ~StreamGenerator();
 
+  StreamGenerator(const StreamGenerator&) = delete;
+  StreamGenerator& operator=(const StreamGenerator&) = delete;
+
   // Add a new stream.
   void AddStream(RtpStream* stream);
 
@@ -108,8 +111,6 @@
   int64_t prev_arrival_time_us_;
   // All streams being transmitted on this simulated channel.
   std::vector<std::unique_ptr<RtpStream>> streams_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(StreamGenerator);
 };
 }  // namespace test
 
diff --git a/modules/congestion_controller/goog_cc/delay_increase_detector_interface.h b/modules/congestion_controller/goog_cc/delay_increase_detector_interface.h
index eaadb0d..fc12cff 100644
--- a/modules/congestion_controller/goog_cc/delay_increase_detector_interface.h
+++ b/modules/congestion_controller/goog_cc/delay_increase_detector_interface.h
@@ -13,7 +13,6 @@
 #include <stdint.h>
 
 #include "api/network_state_predictor.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -22,6 +21,11 @@
   DelayIncreaseDetectorInterface() {}
   virtual ~DelayIncreaseDetectorInterface() {}
 
+  DelayIncreaseDetectorInterface(const DelayIncreaseDetectorInterface&) =
+      delete;
+  DelayIncreaseDetectorInterface& operator=(
+      const DelayIncreaseDetectorInterface&) = delete;
+
   // Update the detector with a new sample. The deltas should represent deltas
   // between timestamp groups as defined by the InterArrival class.
   virtual void Update(double recv_delta_ms,
@@ -32,8 +36,6 @@
                       bool calculated_deltas) = 0;
 
   virtual BandwidthUsage State() const = 0;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DelayIncreaseDetectorInterface);
 };
 
 }  // namespace webrtc
diff --git a/modules/congestion_controller/goog_cc/probe_controller.h b/modules/congestion_controller/goog_cc/probe_controller.h
index 7f24ff9..d0f1458 100644
--- a/modules/congestion_controller/goog_cc/probe_controller.h
+++ b/modules/congestion_controller/goog_cc/probe_controller.h
@@ -22,7 +22,6 @@
 #include "api/transport/network_control.h"
 #include "api/transport/webrtc_key_value_config.h"
 #include "api/units/data_rate.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/experiments/field_trial_parser.h"
 
 namespace webrtc {
@@ -63,6 +62,9 @@
                            RtcEventLog* event_log);
   ~ProbeController();
 
+  ProbeController(const ProbeController&) = delete;
+  ProbeController& operator=(const ProbeController&) = delete;
+
   ABSL_MUST_USE_RESULT std::vector<ProbeClusterConfig> SetBitrates(
       int64_t min_bitrate_bps,
       int64_t start_bitrate_bps,
@@ -143,8 +145,6 @@
   int32_t next_probe_cluster_id_ = 1;
 
   ProbeControllerConfig config_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ProbeController);
 };
 
 }  // namespace webrtc
diff --git a/modules/congestion_controller/goog_cc/trendline_estimator.h b/modules/congestion_controller/goog_cc/trendline_estimator.h
index 75b971d..6fd44249 100644
--- a/modules/congestion_controller/goog_cc/trendline_estimator.h
+++ b/modules/congestion_controller/goog_cc/trendline_estimator.h
@@ -20,7 +20,6 @@
 #include "api/network_state_predictor.h"
 #include "api/transport/webrtc_key_value_config.h"
 #include "modules/congestion_controller/goog_cc/delay_increase_detector_interface.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/experiments/struct_parameters_parser.h"
 
 namespace webrtc {
@@ -57,6 +56,9 @@
 
   ~TrendlineEstimator() override;
 
+  TrendlineEstimator(const TrendlineEstimator&) = delete;
+  TrendlineEstimator& operator=(const TrendlineEstimator&) = delete;
+
   // Update the estimator with a new sample. The deltas should represent deltas
   // between timestamp groups as defined by the InterArrival class.
   void Update(double recv_delta_ms,
@@ -118,8 +120,6 @@
   BandwidthUsage hypothesis_;
   BandwidthUsage hypothesis_predicted_;
   NetworkStatePredictor* network_state_predictor_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(TrendlineEstimator);
 };
 }  // namespace webrtc
 
diff --git a/modules/congestion_controller/rtp/control_handler.h b/modules/congestion_controller/rtp/control_handler.h
index 1da6463..16ffc32 100644
--- a/modules/congestion_controller/rtp/control_handler.h
+++ b/modules/congestion_controller/rtp/control_handler.h
@@ -19,7 +19,6 @@
 #include "api/units/data_size.h"
 #include "api/units/time_delta.h"
 #include "modules/pacing/paced_sender.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/no_unique_address.h"
 
 namespace webrtc {
@@ -33,6 +32,9 @@
   CongestionControlHandler();
   ~CongestionControlHandler();
 
+  CongestionControlHandler(const CongestionControlHandler&) = delete;
+  CongestionControlHandler& operator=(const CongestionControlHandler&) = delete;
+
   void SetTargetRate(TargetTransferRate new_target_rate);
   void SetNetworkAvailability(bool network_available);
   void SetPacerQueue(TimeDelta expected_queue_time);
@@ -48,7 +50,6 @@
   int64_t pacer_expected_queue_ms_ = 0;
 
   RTC_NO_UNIQUE_ADDRESS SequenceChecker sequenced_checker_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(CongestionControlHandler);
 };
 }  // namespace webrtc
 #endif  // MODULES_CONGESTION_CONTROLLER_RTP_CONTROL_HANDLER_H_
diff --git a/modules/desktop_capture/cropped_desktop_frame.cc b/modules/desktop_capture/cropped_desktop_frame.cc
index 3c5c994..54488b7 100644
--- a/modules/desktop_capture/cropped_desktop_frame.cc
+++ b/modules/desktop_capture/cropped_desktop_frame.cc
@@ -15,7 +15,6 @@
 
 #include "modules/desktop_capture/desktop_region.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -25,10 +24,11 @@
   CroppedDesktopFrame(std::unique_ptr<DesktopFrame> frame,
                       const DesktopRect& rect);
 
+  CroppedDesktopFrame(const CroppedDesktopFrame&) = delete;
+  CroppedDesktopFrame& operator=(const CroppedDesktopFrame&) = delete;
+
  private:
   const std::unique_ptr<DesktopFrame> frame_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(CroppedDesktopFrame);
 };
 
 std::unique_ptr<DesktopFrame> CreateCroppedDesktopFrame(
diff --git a/modules/desktop_capture/desktop_and_cursor_composer.cc b/modules/desktop_capture/desktop_and_cursor_composer.cc
index 7be8982..7ca0af0 100644
--- a/modules/desktop_capture/desktop_and_cursor_composer.cc
+++ b/modules/desktop_capture/desktop_and_cursor_composer.cc
@@ -21,7 +21,6 @@
 #include "modules/desktop_capture/mouse_cursor.h"
 #include "modules/desktop_capture/mouse_cursor_monitor.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -72,6 +71,9 @@
                          bool cursor_changed);
   ~DesktopFrameWithCursor() override;
 
+  DesktopFrameWithCursor(const DesktopFrameWithCursor&) = delete;
+  DesktopFrameWithCursor& operator=(const DesktopFrameWithCursor&) = delete;
+
   DesktopRect cursor_rect() const { return cursor_rect_; }
 
  private:
@@ -80,8 +82,6 @@
   DesktopVector restore_position_;
   std::unique_ptr<DesktopFrame> restore_frame_;
   DesktopRect cursor_rect_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DesktopFrameWithCursor);
 };
 
 DesktopFrameWithCursor::DesktopFrameWithCursor(
diff --git a/modules/desktop_capture/desktop_and_cursor_composer.h b/modules/desktop_capture/desktop_and_cursor_composer.h
index a027058..edb764d 100644
--- a/modules/desktop_capture/desktop_and_cursor_composer.h
+++ b/modules/desktop_capture/desktop_and_cursor_composer.h
@@ -21,7 +21,6 @@
 #include "modules/desktop_capture/mouse_cursor.h"
 #include "modules/desktop_capture/mouse_cursor_monitor.h"
 #include "modules/desktop_capture/shared_memory.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -41,6 +40,9 @@
 
   ~DesktopAndCursorComposer() override;
 
+  DesktopAndCursorComposer(const DesktopAndCursorComposer&) = delete;
+  DesktopAndCursorComposer& operator=(const DesktopAndCursorComposer&) = delete;
+
   // Creates a new composer that relies on an external source for cursor shape
   // and position information via the MouseCursorMonitor::Callback interface.
   static std::unique_ptr<DesktopAndCursorComposer>
@@ -84,8 +86,6 @@
   DesktopVector cursor_position_;
   DesktopRect previous_cursor_rect_;
   bool cursor_changed_ = false;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DesktopAndCursorComposer);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/desktop_frame.h b/modules/desktop_capture/desktop_frame.h
index 9c53b83..3ee1867 100644
--- a/modules/desktop_capture/desktop_frame.h
+++ b/modules/desktop_capture/desktop_frame.h
@@ -19,7 +19,6 @@
 #include "modules/desktop_capture/desktop_geometry.h"
 #include "modules/desktop_capture/desktop_region.h"
 #include "modules/desktop_capture/shared_memory.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -34,6 +33,9 @@
 
   virtual ~DesktopFrame();
 
+  DesktopFrame(const DesktopFrame&) = delete;
+  DesktopFrame& operator=(const DesktopFrame&) = delete;
+
   // Returns the rectangle in full desktop coordinates to indicate it covers
   // the area of top_left() to top_letf() + size() / scale_factor().
   DesktopRect rect() const;
@@ -163,8 +165,6 @@
   int64_t capture_time_ms_;
   uint32_t capturer_id_;
   std::vector<uint8_t> icc_profile_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DesktopFrame);
 };
 
 // A DesktopFrame that stores data in the heap.
@@ -175,12 +175,12 @@
 
   ~BasicDesktopFrame() override;
 
+  BasicDesktopFrame(const BasicDesktopFrame&) = delete;
+  BasicDesktopFrame& operator=(const BasicDesktopFrame&) = delete;
+
   // Creates a BasicDesktopFrame that contains copy of `frame`.
   // TODO(zijiehe): Return std::unique_ptr<DesktopFrame>
   static DesktopFrame* CopyOf(const DesktopFrame& frame);
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(BasicDesktopFrame);
 };
 
 // A DesktopFrame that stores data in shared memory.
@@ -206,6 +206,9 @@
 
   ~SharedMemoryDesktopFrame() override;
 
+  SharedMemoryDesktopFrame(const SharedMemoryDesktopFrame&) = delete;
+  SharedMemoryDesktopFrame& operator=(const SharedMemoryDesktopFrame&) = delete;
+
  private:
   // Avoid unexpected order of parameter evaluation.
   // Executing both std::unique_ptr<T>::operator->() and
@@ -217,8 +220,6 @@
   SharedMemoryDesktopFrame(DesktopRect rect,
                            int stride,
                            SharedMemory* shared_memory);
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SharedMemoryDesktopFrame);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/full_screen_application_handler.h b/modules/desktop_capture/full_screen_application_handler.h
index 849cb2c..b7e097a 100644
--- a/modules/desktop_capture/full_screen_application_handler.h
+++ b/modules/desktop_capture/full_screen_application_handler.h
@@ -12,8 +12,8 @@
 #define MODULES_DESKTOP_CAPTURE_FULL_SCREEN_APPLICATION_HANDLER_H_
 
 #include <memory>
+
 #include "modules/desktop_capture/desktop_capturer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -25,6 +25,10 @@
  public:
   virtual ~FullScreenApplicationHandler() {}
 
+  FullScreenApplicationHandler(const FullScreenApplicationHandler&) = delete;
+  FullScreenApplicationHandler& operator=(const FullScreenApplicationHandler&) =
+      delete;
+
   explicit FullScreenApplicationHandler(DesktopCapturer::SourceId sourceId);
 
   // Returns the full-screen window in place of the original window if all the
@@ -39,8 +43,6 @@
 
  private:
   const DesktopCapturer::SourceId source_id_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(FullScreenApplicationHandler);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/full_screen_window_detector.h b/modules/desktop_capture/full_screen_window_detector.h
index ca30d95..998b720 100644
--- a/modules/desktop_capture/full_screen_window_detector.h
+++ b/modules/desktop_capture/full_screen_window_detector.h
@@ -12,12 +12,12 @@
 #define MODULES_DESKTOP_CAPTURE_FULL_SCREEN_WINDOW_DETECTOR_H_
 
 #include <memory>
+
 #include "api/function_view.h"
 #include "api/ref_counted_base.h"
 #include "api/scoped_refptr.h"
 #include "modules/desktop_capture/desktop_capturer.h"
 #include "modules/desktop_capture/full_screen_application_handler.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -42,6 +42,9 @@
   FullScreenWindowDetector(
       ApplicationHandlerFactory application_handler_factory);
 
+  FullScreenWindowDetector(const FullScreenWindowDetector&) = delete;
+  FullScreenWindowDetector& operator=(const FullScreenWindowDetector&) = delete;
+
   // Returns the full-screen window in place of the original window if all the
   // criteria provided by FullScreenApplicationHandler are met, or 0 if no such
   // window found.
@@ -73,7 +76,6 @@
   DesktopCapturer::SourceId no_handler_source_id_;
 
   DesktopCapturer::SourceList window_list_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(FullScreenWindowDetector);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/mac/desktop_configuration_monitor.h b/modules/desktop_capture/mac/desktop_configuration_monitor.h
index aa0ebfb..747295a 100644
--- a/modules/desktop_capture/mac/desktop_configuration_monitor.h
+++ b/modules/desktop_capture/mac/desktop_configuration_monitor.h
@@ -18,7 +18,6 @@
 
 #include "api/ref_counted_base.h"
 #include "modules/desktop_capture/mac/desktop_configuration.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/synchronization/mutex.h"
 
 namespace webrtc {
@@ -31,6 +30,10 @@
   DesktopConfigurationMonitor();
   ~DesktopConfigurationMonitor();
 
+  DesktopConfigurationMonitor(const DesktopConfigurationMonitor&) = delete;
+  DesktopConfigurationMonitor& operator=(const DesktopConfigurationMonitor&) =
+      delete;
+
   // Returns the current desktop configuration.
   MacDesktopConfiguration desktop_configuration();
 
@@ -45,8 +48,6 @@
   MacDesktopConfiguration desktop_configuration_
       RTC_GUARDED_BY(&desktop_configuration_lock_);
   std::set<CGDirectDisplayID> reconfiguring_displays_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DesktopConfigurationMonitor);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/mac/desktop_frame_cgimage.h b/modules/desktop_capture/mac/desktop_frame_cgimage.h
index 8780438..d6279f9 100644
--- a/modules/desktop_capture/mac/desktop_frame_cgimage.h
+++ b/modules/desktop_capture/mac/desktop_frame_cgimage.h
@@ -35,6 +35,9 @@
 
   ~DesktopFrameCGImage() override;
 
+  DesktopFrameCGImage(const DesktopFrameCGImage&) = delete;
+  DesktopFrameCGImage& operator=(const DesktopFrameCGImage&) = delete;
+
  private:
   static std::unique_ptr<DesktopFrameCGImage> CreateFromCGImage(
       rtc::ScopedCFTypeRef<CGImageRef> cg_image);
@@ -48,8 +51,6 @@
 
   const rtc::ScopedCFTypeRef<CGImageRef> cg_image_;
   const rtc::ScopedCFTypeRef<CFDataRef> cg_data_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DesktopFrameCGImage);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/mac/desktop_frame_iosurface.h b/modules/desktop_capture/mac/desktop_frame_iosurface.h
index f79197a..73da0f6 100644
--- a/modules/desktop_capture/mac/desktop_frame_iosurface.h
+++ b/modules/desktop_capture/mac/desktop_frame_iosurface.h
@@ -30,13 +30,14 @@
 
   ~DesktopFrameIOSurface() override;
 
+  DesktopFrameIOSurface(const DesktopFrameIOSurface&) = delete;
+  DesktopFrameIOSurface& operator=(const DesktopFrameIOSurface&) = delete;
+
  private:
   // This constructor expects `io_surface` to hold a non-null IOSurfaceRef.
   explicit DesktopFrameIOSurface(rtc::ScopedCFTypeRef<IOSurfaceRef> io_surface);
 
   const rtc::ScopedCFTypeRef<IOSurfaceRef> io_surface_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DesktopFrameIOSurface);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/mac/desktop_frame_provider.h b/modules/desktop_capture/mac/desktop_frame_provider.h
index bb45d1e..aad28d2 100644
--- a/modules/desktop_capture/mac/desktop_frame_provider.h
+++ b/modules/desktop_capture/mac/desktop_frame_provider.h
@@ -28,6 +28,9 @@
   explicit DesktopFrameProvider(bool allow_iosurface);
   ~DesktopFrameProvider();
 
+  DesktopFrameProvider(const DesktopFrameProvider&) = delete;
+  DesktopFrameProvider& operator=(const DesktopFrameProvider&) = delete;
+
   // The caller takes ownership of the returned desktop frame. Otherwise
   // returns null if `display_id` is invalid or not ready. Note that this
   // function does not remove the frame from the internal container. Caller
@@ -49,8 +52,6 @@
 
   // Most recent IOSurface that contains a capture of matching display.
   std::map<CGDirectDisplayID, std::unique_ptr<SharedDesktopFrame>> io_surfaces_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DesktopFrameProvider);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/mac/screen_capturer_mac.h b/modules/desktop_capture/mac/screen_capturer_mac.h
index 68b8655..d9a5966 100644
--- a/modules/desktop_capture/mac/screen_capturer_mac.h
+++ b/modules/desktop_capture/mac/screen_capturer_mac.h
@@ -42,6 +42,9 @@
       bool allow_iosurface);
   ~ScreenCapturerMac() override;
 
+  ScreenCapturerMac(const ScreenCapturerMac&) = delete;
+  ScreenCapturerMac& operator=(const ScreenCapturerMac&) = delete;
+
   // TODO(julien.isorce): Remove Init() or make it private.
   bool Init();
 
@@ -111,8 +114,6 @@
 
   // Start, CaptureFrame and destructor have to called in the same thread.
   SequenceChecker thread_checker_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ScreenCapturerMac);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/mock_desktop_capturer_callback.h b/modules/desktop_capture/mock_desktop_capturer_callback.h
index 6530dc5..bb15cea 100644
--- a/modules/desktop_capture/mock_desktop_capturer_callback.h
+++ b/modules/desktop_capture/mock_desktop_capturer_callback.h
@@ -22,15 +22,16 @@
   MockDesktopCapturerCallback();
   ~MockDesktopCapturerCallback() override;
 
+  MockDesktopCapturerCallback(const MockDesktopCapturerCallback&) = delete;
+  MockDesktopCapturerCallback& operator=(const MockDesktopCapturerCallback&) =
+      delete;
+
   MOCK_METHOD(void,
               OnCaptureResultPtr,
               (DesktopCapturer::Result result,
                std::unique_ptr<DesktopFrame>* frame));
   void OnCaptureResult(DesktopCapturer::Result result,
                        std::unique_ptr<DesktopFrame> frame) final;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(MockDesktopCapturerCallback);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/mouse_cursor.h b/modules/desktop_capture/mouse_cursor.h
index 0a74140..2dd7931 100644
--- a/modules/desktop_capture/mouse_cursor.h
+++ b/modules/desktop_capture/mouse_cursor.h
@@ -15,7 +15,6 @@
 
 #include "modules/desktop_capture/desktop_frame.h"
 #include "modules/desktop_capture/desktop_geometry.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -29,6 +28,9 @@
 
   ~MouseCursor();
 
+  MouseCursor(const MouseCursor&) = delete;
+  MouseCursor& operator=(const MouseCursor&) = delete;
+
   static MouseCursor* CopyOf(const MouseCursor& cursor);
 
   void set_image(DesktopFrame* image) { image_.reset(image); }
@@ -40,8 +42,6 @@
  private:
   std::unique_ptr<DesktopFrame> image_;
   DesktopVector hotspot_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(MouseCursor);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/screen_capture_frame_queue.h b/modules/desktop_capture/screen_capture_frame_queue.h
index a92bac6..f54b8b6 100644
--- a/modules/desktop_capture/screen_capture_frame_queue.h
+++ b/modules/desktop_capture/screen_capture_frame_queue.h
@@ -13,7 +13,6 @@
 
 #include <memory>
 
-#include "rtc_base/constructor_magic.h"
 // TODO(zijiehe): These headers are not used in this file, but to avoid build
 // break in remoting/host. We should add headers in each individual files.
 #include "modules/desktop_capture/desktop_frame.h"         // Remove
@@ -40,6 +39,9 @@
   ScreenCaptureFrameQueue() : current_(0) {}
   ~ScreenCaptureFrameQueue() = default;
 
+  ScreenCaptureFrameQueue(const ScreenCaptureFrameQueue&) = delete;
+  ScreenCaptureFrameQueue& operator=(const ScreenCaptureFrameQueue&) = delete;
+
   // Moves to the next frame in the queue, moving the 'current' frame to become
   // the 'previous' one.
   void MoveToNextFrame() { current_ = (current_ + 1) % kQueueLength; }
@@ -71,8 +73,6 @@
 
   static const int kQueueLength = 2;
   std::unique_ptr<FrameType> frames_[kQueueLength];
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ScreenCaptureFrameQueue);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/screen_capturer_helper.h b/modules/desktop_capture/screen_capturer_helper.h
index f7c447a..cd7fa68 100644
--- a/modules/desktop_capture/screen_capturer_helper.h
+++ b/modules/desktop_capture/screen_capturer_helper.h
@@ -15,7 +15,6 @@
 
 #include "modules/desktop_capture/desktop_geometry.h"
 #include "modules/desktop_capture/desktop_region.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/thread_annotations.h"
 
@@ -30,6 +29,9 @@
   ScreenCapturerHelper() = default;
   ~ScreenCapturerHelper() = default;
 
+  ScreenCapturerHelper(const ScreenCapturerHelper&) = delete;
+  ScreenCapturerHelper& operator=(const ScreenCapturerHelper&) = delete;
+
   // Clear out the invalid region.
   void ClearInvalidRegion();
 
@@ -82,8 +84,6 @@
   // expanded.
   // If the value is <= 0, then the invalid region is not expanded to a grid.
   int log_grid_size_ = 0;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ScreenCapturerHelper);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/screen_capturer_unittest.cc b/modules/desktop_capture/screen_capturer_unittest.cc
index ba6b8bf..8f5fe63 100644
--- a/modules/desktop_capture/screen_capturer_unittest.cc
+++ b/modules/desktop_capture/screen_capturer_unittest.cc
@@ -15,7 +15,6 @@
 #include "modules/desktop_capture/desktop_frame.h"
 #include "modules/desktop_capture/desktop_region.h"
 #include "modules/desktop_capture/mock_desktop_capturer_callback.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/logging.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
@@ -76,9 +75,11 @@
       : SharedMemory(buffer, size, 0, kTestSharedMemoryId), buffer_(buffer) {}
   ~FakeSharedMemory() override { delete[] buffer_; }
 
+  FakeSharedMemory(const FakeSharedMemory&) = delete;
+  FakeSharedMemory& operator=(const FakeSharedMemory&) = delete;
+
  private:
   char* buffer_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(FakeSharedMemory);
 };
 
 class FakeSharedMemoryFactory : public SharedMemoryFactory {
@@ -86,13 +87,13 @@
   FakeSharedMemoryFactory() {}
   ~FakeSharedMemoryFactory() override {}
 
+  FakeSharedMemoryFactory(const FakeSharedMemoryFactory&) = delete;
+  FakeSharedMemoryFactory& operator=(const FakeSharedMemoryFactory&) = delete;
+
   std::unique_ptr<SharedMemory> CreateSharedMemory(size_t size) override {
     return std::unique_ptr<SharedMemory>(
         new FakeSharedMemory(new char[size], size));
   }
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(FakeSharedMemoryFactory);
 };
 
 ACTION_P(SaveUniquePtrArg, dest) {
diff --git a/modules/desktop_capture/shared_desktop_frame.h b/modules/desktop_capture/shared_desktop_frame.h
index 29f9306..c6f5224 100644
--- a/modules/desktop_capture/shared_desktop_frame.h
+++ b/modules/desktop_capture/shared_desktop_frame.h
@@ -15,7 +15,6 @@
 
 #include "api/scoped_refptr.h"
 #include "modules/desktop_capture/desktop_frame.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/ref_counted_object.h"
 #include "rtc_base/system/rtc_export.h"
 
@@ -27,6 +26,9 @@
  public:
   ~SharedDesktopFrame() override;
 
+  SharedDesktopFrame(const SharedDesktopFrame&) = delete;
+  SharedDesktopFrame& operator=(const SharedDesktopFrame&) = delete;
+
   static std::unique_ptr<SharedDesktopFrame> Wrap(
       std::unique_ptr<DesktopFrame> desktop_frame);
 
@@ -56,8 +58,6 @@
   SharedDesktopFrame(rtc::scoped_refptr<Core> core);
 
   const rtc::scoped_refptr<Core> core_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SharedDesktopFrame);
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/shared_memory.h b/modules/desktop_capture/shared_memory.h
index 49a9252..a7add44 100644
--- a/modules/desktop_capture/shared_memory.h
+++ b/modules/desktop_capture/shared_memory.h
@@ -21,7 +21,6 @@
 
 #include <memory>
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -54,6 +53,9 @@
 
   virtual ~SharedMemory() {}
 
+  SharedMemory(const SharedMemory&) = delete;
+  SharedMemory& operator=(const SharedMemory&) = delete;
+
  protected:
   SharedMemory(void* data, size_t size, Handle handle, int id);
 
@@ -61,9 +63,6 @@
   const size_t size_;
   const Handle handle_;
   const int id_;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(SharedMemory);
 };
 
 // Interface used to create SharedMemory instances.
@@ -72,10 +71,10 @@
   SharedMemoryFactory() {}
   virtual ~SharedMemoryFactory() {}
 
-  virtual std::unique_ptr<SharedMemory> CreateSharedMemory(size_t size) = 0;
+  SharedMemoryFactory(const SharedMemoryFactory&) = delete;
+  SharedMemoryFactory& operator=(const SharedMemoryFactory&) = delete;
 
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(SharedMemoryFactory);
+  virtual std::unique_ptr<SharedMemory> CreateSharedMemory(size_t size) = 0;
 };
 
 }  // namespace webrtc
diff --git a/modules/desktop_capture/win/screen_capturer_win_directx.h b/modules/desktop_capture/win/screen_capturer_win_directx.h
index 378f9a7..2d0fce6 100644
--- a/modules/desktop_capture/win/screen_capturer_win_directx.h
+++ b/modules/desktop_capture/win/screen_capturer_win_directx.h
@@ -23,6 +23,7 @@
 #include "modules/desktop_capture/screen_capture_frame_queue.h"
 #include "modules/desktop_capture/win/dxgi_duplicator_controller.h"
 #include "modules/desktop_capture/win/dxgi_frame.h"
+#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
diff --git a/modules/desktop_capture/window_capturer_mac.mm b/modules/desktop_capture/window_capturer_mac.mm
index de15d65..f0b413b 100644
--- a/modules/desktop_capture/window_capturer_mac.mm
+++ b/modules/desktop_capture/window_capturer_mac.mm
@@ -24,7 +24,6 @@
 #include "modules/desktop_capture/mac/window_list_utils.h"
 #include "modules/desktop_capture/window_finder_mac.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/trace_event.h"
 
@@ -52,6 +51,9 @@
       rtc::scoped_refptr<DesktopConfigurationMonitor> configuration_monitor);
   ~WindowCapturerMac() override;
 
+  WindowCapturerMac(const WindowCapturerMac&) = delete;
+  WindowCapturerMac& operator=(const WindowCapturerMac&) = delete;
+
   // DesktopCapturer interface.
   void Start(Callback* callback) override;
   void CaptureFrame() override;
@@ -71,8 +73,6 @@
   const rtc::scoped_refptr<DesktopConfigurationMonitor> configuration_monitor_;
 
   WindowFinderMac window_finder_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(WindowCapturerMac);
 };
 
 WindowCapturerMac::WindowCapturerMac(
diff --git a/modules/pacing/packet_router.h b/modules/pacing/packet_router.h
index 9958a50..11d8979 100644
--- a/modules/pacing/packet_router.h
+++ b/modules/pacing/packet_router.h
@@ -25,7 +25,6 @@
 #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
 #include "modules/rtp_rtcp/source/rtcp_packet.h"
 #include "modules/rtp_rtcp/source/rtp_packet_to_send.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/thread_annotations.h"
 
@@ -44,6 +43,9 @@
   explicit PacketRouter(uint16_t start_transport_seq);
   ~PacketRouter() override;
 
+  PacketRouter(const PacketRouter&) = delete;
+  PacketRouter& operator=(const PacketRouter&) = delete;
+
   void AddSendRtpModule(RtpRtcpInterface* rtp_module, bool remb_candidate);
   void RemoveSendRtpModule(RtpRtcpInterface* rtp_module);
 
@@ -107,8 +109,6 @@
   // process thread is gone.
   std::vector<std::unique_ptr<RtpPacketToSend>> pending_fec_packets_
       RTC_GUARDED_BY(modules_mutex_);
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(PacketRouter);
 };
 }  // namespace webrtc
 #endif  // MODULES_PACING_PACKET_ROUTER_H_
diff --git a/modules/remote_bitrate_estimator/overuse_detector.h b/modules/remote_bitrate_estimator/overuse_detector.h
index d1c6aa8..179e290 100644
--- a/modules/remote_bitrate_estimator/overuse_detector.h
+++ b/modules/remote_bitrate_estimator/overuse_detector.h
@@ -14,7 +14,6 @@
 
 #include "api/network_state_predictor.h"
 #include "api/transport/webrtc_key_value_config.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -26,6 +25,9 @@
   explicit OveruseDetector(const WebRtcKeyValueConfig* key_value_config);
   virtual ~OveruseDetector();
 
+  OveruseDetector(const OveruseDetector&) = delete;
+  OveruseDetector& operator=(const OveruseDetector&) = delete;
+
   // Update the detection state based on the estimated inter-arrival time delta
   // offset. `timestamp_delta` is the delta between the last timestamp which the
   // estimated offset is based on and the last timestamp on which the last
@@ -54,8 +56,6 @@
   double time_over_using_;
   int overuse_counter_;
   BandwidthUsage hypothesis_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(OveruseDetector);
 };
 }  // namespace webrtc
 
diff --git a/modules/remote_bitrate_estimator/overuse_estimator.h b/modules/remote_bitrate_estimator/overuse_estimator.h
index d023b36..c021f00 100644
--- a/modules/remote_bitrate_estimator/overuse_estimator.h
+++ b/modules/remote_bitrate_estimator/overuse_estimator.h
@@ -15,7 +15,6 @@
 #include <deque>
 
 #include "api/network_state_predictor.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -39,6 +38,9 @@
   explicit OveruseEstimator(const OverUseDetectorOptions& options);
   ~OveruseEstimator();
 
+  OveruseEstimator(const OveruseEstimator&) = delete;
+  OveruseEstimator& operator=(const OveruseEstimator&) = delete;
+
   // Update the estimator with a new sample. The deltas should represent deltas
   // between timestamp groups as defined by the InterArrival class.
   // `current_hypothesis` should be the hypothesis of the over-use detector at
@@ -75,8 +77,6 @@
   double avg_noise_;
   double var_noise_;
   std::deque<double> ts_delta_hist_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(OveruseEstimator);
 };
 }  // namespace webrtc
 
diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc
index 10dd99c..d8ef23c 100644
--- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc
+++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc
@@ -11,7 +11,6 @@
 #include "modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h"
 
 #include "modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h"
-#include "rtc_base/constructor_magic.h"
 #include "test/gtest.h"
 
 namespace webrtc {
@@ -20,13 +19,18 @@
     : public RemoteBitrateEstimatorTest {
  public:
   RemoteBitrateEstimatorAbsSendTimeTest() {}
+
+  RemoteBitrateEstimatorAbsSendTimeTest(
+      const RemoteBitrateEstimatorAbsSendTimeTest&) = delete;
+  RemoteBitrateEstimatorAbsSendTimeTest& operator=(
+      const RemoteBitrateEstimatorAbsSendTimeTest&) = delete;
+
   virtual void SetUp() {
     bitrate_estimator_.reset(new RemoteBitrateEstimatorAbsSendTime(
         bitrate_observer_.get(), &clock_));
   }
 
  protected:
-  RTC_DISALLOW_COPY_AND_ASSIGN(RemoteBitrateEstimatorAbsSendTimeTest);
 };
 
 TEST_F(RemoteBitrateEstimatorAbsSendTimeTest, InitialBehavior) {
diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc b/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc
index d0a7b22..64ef39d 100644
--- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc
+++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc
@@ -11,7 +11,6 @@
 #include "modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h"
 
 #include "modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h"
-#include "rtc_base/constructor_magic.h"
 #include "test/gtest.h"
 
 namespace webrtc {
@@ -19,13 +18,18 @@
 class RemoteBitrateEstimatorSingleTest : public RemoteBitrateEstimatorTest {
  public:
   RemoteBitrateEstimatorSingleTest() {}
+
+  RemoteBitrateEstimatorSingleTest(const RemoteBitrateEstimatorSingleTest&) =
+      delete;
+  RemoteBitrateEstimatorSingleTest& operator=(
+      const RemoteBitrateEstimatorSingleTest&) = delete;
+
   virtual void SetUp() {
     bitrate_estimator_.reset(new RemoteBitrateEstimatorSingleStream(
         bitrate_observer_.get(), &clock_));
   }
 
  protected:
-  RTC_DISALLOW_COPY_AND_ASSIGN(RemoteBitrateEstimatorSingleTest);
 };
 
 TEST_F(RemoteBitrateEstimatorSingleTest, InitialBehavior) {
diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h b/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h
index db4e899..a3b1cfd 100644
--- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h
+++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h
@@ -18,7 +18,6 @@
 #include <vector>
 
 #include "modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
-#include "rtc_base/constructor_magic.h"
 #include "system_wrappers/include/clock.h"
 #include "test/gtest.h"
 
@@ -71,6 +70,10 @@
             uint32_t frequency,
             uint32_t timestamp_offset,
             int64_t rtcp_receive_time);
+
+  RtpStream(const RtpStream&) = delete;
+  RtpStream& operator=(const RtpStream&) = delete;
+
   void set_rtp_timestamp_offset(uint32_t offset);
 
   // Generates a new frame for this stream. If called too soon after the
@@ -104,8 +107,6 @@
   int64_t next_rtcp_time_;
   uint32_t rtp_timestamp_offset_;
   const double kNtpFracPerMs;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtpStream);
 };
 
 class StreamGenerator {
@@ -116,6 +117,9 @@
 
   ~StreamGenerator();
 
+  StreamGenerator(const StreamGenerator&) = delete;
+  StreamGenerator& operator=(const StreamGenerator&) = delete;
+
   // Add a new stream.
   void AddStream(RtpStream* stream);
 
@@ -142,8 +146,6 @@
   int64_t prev_arrival_time_us_;
   // All streams being transmitted on this simulated channel.
   StreamMap streams_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(StreamGenerator);
 };
 }  // namespace testing
 
@@ -152,6 +154,10 @@
   RemoteBitrateEstimatorTest();
   virtual ~RemoteBitrateEstimatorTest();
 
+  RemoteBitrateEstimatorTest(const RemoteBitrateEstimatorTest&) = delete;
+  RemoteBitrateEstimatorTest& operator=(const RemoteBitrateEstimatorTest&) =
+      delete;
+
  protected:
   virtual void SetUp() = 0;
 
@@ -213,8 +219,6 @@
   std::unique_ptr<RemoteBitrateEstimator> bitrate_estimator_;
   std::unique_ptr<testing::StreamGenerator> stream_generator_;
   int64_t arrival_time_offset_ms_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RemoteBitrateEstimatorTest);
 };
 }  // namespace webrtc
 
diff --git a/modules/rtp_rtcp/include/remote_ntp_time_estimator.h b/modules/rtp_rtcp/include/remote_ntp_time_estimator.h
index 5734a50..f31503d 100644
--- a/modules/rtp_rtcp/include/remote_ntp_time_estimator.h
+++ b/modules/rtp_rtcp/include/remote_ntp_time_estimator.h
@@ -14,7 +14,6 @@
 #include <stdint.h>
 
 #include "absl/types/optional.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/numerics/moving_median_filter.h"
 #include "system_wrappers/include/rtp_to_ntp_estimator.h"
 
@@ -32,6 +31,9 @@
 
   ~RemoteNtpTimeEstimator();
 
+  RemoteNtpTimeEstimator(const RemoteNtpTimeEstimator&) = delete;
+  RemoteNtpTimeEstimator& operator=(const RemoteNtpTimeEstimator&) = delete;
+
   // Updates the estimator with round trip time `rtt`, NTP seconds `ntp_secs`,
   // NTP fraction `ntp_frac` and RTP timestamp `rtp_timestamp`.
   bool UpdateRtcpTimestamp(int64_t rtt,
@@ -52,7 +54,6 @@
   MovingMedianFilter<int64_t> ntp_clocks_offset_estimator_;
   RtpToNtpEstimator rtp_to_ntp_;
   int64_t last_timing_log_ms_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(RemoteNtpTimeEstimator);
 };
 
 }  // namespace webrtc
diff --git a/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h b/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h
index 8bee600..d98dbd0 100644
--- a/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h
+++ b/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h
@@ -16,7 +16,6 @@
 #include <vector>
 
 #include "modules/rtp_rtcp/source/rtcp_packet.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 namespace rtcp {
@@ -26,6 +25,9 @@
   CompoundPacket();
   ~CompoundPacket() override;
 
+  CompoundPacket(const CompoundPacket&) = delete;
+  CompoundPacket& operator=(const CompoundPacket&) = delete;
+
   void Append(std::unique_ptr<RtcpPacket> packet);
 
   // Size of this packet in bytes (i.e. total size of nested packets).
@@ -38,9 +40,6 @@
 
  protected:
   std::vector<std::unique_ptr<RtcpPacket>> appended_packets_;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(CompoundPacket);
 };
 
 }  // namespace rtcp
diff --git a/modules/rtp_rtcp/source/rtp_format_h264.h b/modules/rtp_rtcp/source/rtp_format_h264.h
index f658594..283beac 100644
--- a/modules/rtp_rtcp/source/rtp_format_h264.h
+++ b/modules/rtp_rtcp/source/rtp_format_h264.h
@@ -23,7 +23,6 @@
 #include "modules/rtp_rtcp/source/rtp_packet_to_send.h"
 #include "modules/video_coding/codecs/h264/include/h264_globals.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -37,6 +36,9 @@
 
   ~RtpPacketizerH264() override;
 
+  RtpPacketizerH264(const RtpPacketizerH264&) = delete;
+  RtpPacketizerH264& operator=(const RtpPacketizerH264&) = delete;
+
   size_t NumPackets() const override;
 
   // Get the next payload with H264 payload header.
@@ -82,8 +84,6 @@
   size_t num_packets_left_;
   std::deque<rtc::ArrayView<const uint8_t>> input_fragments_;
   std::queue<PacketUnit> packets_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtpPacketizerH264);
 };
 }  // namespace webrtc
 #endif  // MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_H264_H_
diff --git a/modules/rtp_rtcp/source/rtp_format_video_generic.h b/modules/rtp_rtcp/source/rtp_format_video_generic.h
index 5acd691..fd44bd1 100644
--- a/modules/rtp_rtcp/source/rtp_format_video_generic.h
+++ b/modules/rtp_rtcp/source/rtp_format_video_generic.h
@@ -16,7 +16,6 @@
 
 #include "api/array_view.h"
 #include "modules/rtp_rtcp/source/rtp_format.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -48,6 +47,9 @@
 
   ~RtpPacketizerGeneric() override;
 
+  RtpPacketizerGeneric(const RtpPacketizerGeneric&) = delete;
+  RtpPacketizerGeneric& operator=(const RtpPacketizerGeneric&) = delete;
+
   size_t NumPackets() const override;
 
   // Get the next payload.
@@ -64,8 +66,6 @@
   rtc::ArrayView<const uint8_t> remaining_payload_;
   std::vector<int> payload_sizes_;
   std::vector<int>::const_iterator current_packet_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtpPacketizerGeneric);
 };
 }  // namespace webrtc
 #endif  // MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_VIDEO_GENERIC_H_
diff --git a/modules/rtp_rtcp/source/rtp_format_vp8.h b/modules/rtp_rtcp/source/rtp_format_vp8.h
index 2100928..d1f569a 100644
--- a/modules/rtp_rtcp/source/rtp_format_vp8.h
+++ b/modules/rtp_rtcp/source/rtp_format_vp8.h
@@ -35,7 +35,6 @@
 #include "modules/rtp_rtcp/source/rtp_format.h"
 #include "modules/rtp_rtcp/source/rtp_packet_to_send.h"
 #include "modules/video_coding/codecs/vp8/include/vp8_globals.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -50,6 +49,9 @@
 
   ~RtpPacketizerVp8() override;
 
+  RtpPacketizerVp8(const RtpPacketizerVp8&) = delete;
+  RtpPacketizerVp8& operator=(const RtpPacketizerVp8&) = delete;
+
   size_t NumPackets() const override;
 
   // Get the next payload with VP8 payload header.
@@ -66,8 +68,6 @@
   rtc::ArrayView<const uint8_t> remaining_payload_;
   std::vector<int> payload_sizes_;
   std::vector<int>::const_iterator current_packet_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtpPacketizerVp8);
 };
 
 }  // namespace webrtc
diff --git a/modules/rtp_rtcp/source/rtp_format_vp8_test_helper.h b/modules/rtp_rtcp/source/rtp_format_vp8_test_helper.h
index 916d657..3ecaa47 100644
--- a/modules/rtp_rtcp/source/rtp_format_vp8_test_helper.h
+++ b/modules/rtp_rtcp/source/rtp_format_vp8_test_helper.h
@@ -21,7 +21,6 @@
 #include "modules/rtp_rtcp/source/rtp_format_vp8.h"
 #include "modules/video_coding/codecs/vp8/include/vp8_globals.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -29,6 +28,10 @@
  public:
   RtpFormatVp8TestHelper(const RTPVideoHeaderVP8* hdr, size_t payload_len);
   ~RtpFormatVp8TestHelper();
+
+  RtpFormatVp8TestHelper(const RtpFormatVp8TestHelper&) = delete;
+  RtpFormatVp8TestHelper& operator=(const RtpFormatVp8TestHelper&) = delete;
+
   void GetAllPacketsAndCheck(RtpPacketizerVp8* packetizer,
                              rtc::ArrayView<const size_t> expected_sizes);
 
@@ -46,8 +49,6 @@
 
   const RTPVideoHeaderVP8* const hdr_info_;
   rtc::Buffer payload_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtpFormatVp8TestHelper);
 };
 
 }  // namespace webrtc
diff --git a/modules/rtp_rtcp/source/rtp_format_vp9.h b/modules/rtp_rtcp/source/rtp_format_vp9.h
index 02458ae..3cf4dd5 100644
--- a/modules/rtp_rtcp/source/rtp_format_vp9.h
+++ b/modules/rtp_rtcp/source/rtp_format_vp9.h
@@ -30,7 +30,6 @@
 #include "modules/rtp_rtcp/source/rtp_format.h"
 #include "modules/rtp_rtcp/source/rtp_packet_to_send.h"
 #include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -43,6 +42,9 @@
 
   ~RtpPacketizerVp9() override;
 
+  RtpPacketizerVp9(const RtpPacketizerVp9&) = delete;
+  RtpPacketizerVp9& operator=(const RtpPacketizerVp9&) = delete;
+
   size_t NumPackets() const override;
 
   // Gets the next payload with VP9 payload header.
@@ -64,8 +66,6 @@
   rtc::ArrayView<const uint8_t> remaining_payload_;
   std::vector<int> payload_sizes_;
   std::vector<int>::const_iterator current_packet_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RtpPacketizerVp9);
 };
 
 }  // namespace webrtc
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_interface.h b/modules/rtp_rtcp/source/rtp_rtcp_interface.h
index f3cb8d2..a411b23 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_interface.h
+++ b/modules/rtp_rtcp/source/rtp_rtcp_interface.h
@@ -27,7 +27,6 @@
 #include "modules/rtp_rtcp/source/rtp_packet_to_send.h"
 #include "modules/rtp_rtcp/source/rtp_sequence_number_map.h"
 #include "modules/rtp_rtcp/source/video_fec_generator.h"
-#include "rtc_base/constructor_magic.h"
 #include "system_wrappers/include/ntp_time.h"
 
 namespace webrtc {
@@ -47,6 +46,9 @@
     Configuration() = default;
     Configuration(Configuration&& rhs) = default;
 
+    Configuration(const Configuration&) = delete;
+    Configuration& operator=(const Configuration&) = delete;
+
     // True for a audio version of the RTP/RTCP module object false will create
     // a video version.
     bool audio = false;
@@ -145,9 +147,6 @@
     // Estimate RTT as non-sender as described in
     // https://tools.ietf.org/html/rfc3611#section-4.4 and #section-4.5
     bool non_sender_rtt_measurement = false;
-
-   private:
-    RTC_DISALLOW_COPY_AND_ASSIGN(Configuration);
   };
 
   // Stats for RTCP sender reports (SR) for a specific SSRC.
diff --git a/modules/video_coding/codecs/test/videoprocessor.h b/modules/video_coding/codecs/test/videoprocessor.h
index eafe492..595a4f1 100644
--- a/modules/video_coding/codecs/test/videoprocessor.h
+++ b/modules/video_coding/codecs/test/videoprocessor.h
@@ -37,7 +37,6 @@
 #include "modules/video_coding/utility/ivf_file_writer.h"
 #include "rtc_base/buffer.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/no_unique_address.h"
 #include "rtc_base/thread_annotations.h"
 #include "test/testsupport/frame_reader.h"
@@ -70,6 +69,9 @@
                  FrameWriterList* decoded_frame_writers);
   ~VideoProcessor();
 
+  VideoProcessor(const VideoProcessor&) = delete;
+  VideoProcessor& operator=(const VideoProcessor&) = delete;
+
   // Reads a frame and sends it to the encoder. When the encode callback
   // is received, the encoded frame is buffered. After encoding is finished
   // buffered frame is sent to decoder. Quality evaluation is done in
@@ -270,8 +272,6 @@
 
   // This class must be operated on a TaskQueue.
   RTC_NO_UNIQUE_ADDRESS SequenceChecker sequence_checker_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(VideoProcessor);
 };
 
 }  // namespace test
diff --git a/modules/video_coding/fec_controller_default.h b/modules/video_coding/fec_controller_default.h
index 6b9e8eb..cca1658 100644
--- a/modules/video_coding/fec_controller_default.h
+++ b/modules/video_coding/fec_controller_default.h
@@ -19,7 +19,6 @@
 
 #include "api/fec_controller.h"
 #include "modules/video_coding/media_opt_util.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/thread_annotations.h"
 #include "system_wrappers/include/clock.h"
@@ -32,6 +31,10 @@
                        VCMProtectionCallback* protection_callback);
   explicit FecControllerDefault(Clock* clock);
   ~FecControllerDefault() override;
+
+  FecControllerDefault(const FecControllerDefault&) = delete;
+  FecControllerDefault& operator=(const FecControllerDefault&) = delete;
+
   void SetProtectionCallback(
       VCMProtectionCallback* protection_callback) override;
   void SetProtectionMethod(bool enable_fec, bool enable_nack) override;
@@ -58,7 +61,7 @@
   std::unique_ptr<media_optimization::VCMLossProtectionLogic> loss_prot_logic_
       RTC_GUARDED_BY(mutex_);
   size_t max_payload_size_ RTC_GUARDED_BY(mutex_);
-  RTC_DISALLOW_COPY_AND_ASSIGN(FecControllerDefault);
+
   const float overhead_threshold_;
 };
 
diff --git a/modules/video_coding/h264_sprop_parameter_sets.h b/modules/video_coding/h264_sprop_parameter_sets.h
index dbf27ef..8a32f31 100644
--- a/modules/video_coding/h264_sprop_parameter_sets.h
+++ b/modules/video_coding/h264_sprop_parameter_sets.h
@@ -15,13 +15,15 @@
 #include <string>
 #include <vector>
 
-#include "rtc_base/constructor_magic.h"
-
 namespace webrtc {
 
 class H264SpropParameterSets {
  public:
   H264SpropParameterSets() {}
+
+  H264SpropParameterSets(const H264SpropParameterSets&) = delete;
+  H264SpropParameterSets& operator=(const H264SpropParameterSets&) = delete;
+
   bool DecodeSprop(const std::string& sprop);
   const std::vector<uint8_t>& sps_nalu() { return sps_; }
   const std::vector<uint8_t>& pps_nalu() { return pps_; }
@@ -29,7 +31,6 @@
  private:
   std::vector<uint8_t> sps_;
   std::vector<uint8_t> pps_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(H264SpropParameterSets);
 };
 
 }  // namespace webrtc
diff --git a/modules/video_coding/jitter_buffer.h b/modules/video_coding/jitter_buffer.h
index 23f19bf..df7581a 100644
--- a/modules/video_coding/jitter_buffer.h
+++ b/modules/video_coding/jitter_buffer.h
@@ -26,7 +26,6 @@
 #include "modules/video_coding/inter_frame_delay.h"
 #include "modules/video_coding/jitter_buffer_common.h"
 #include "modules/video_coding/jitter_estimator.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/thread_annotations.h"
 
@@ -74,6 +73,9 @@
 
   ~VCMJitterBuffer();
 
+  VCMJitterBuffer(const VCMJitterBuffer&) = delete;
+  VCMJitterBuffer& operator=(const VCMJitterBuffer&) = delete;
+
   // Initializes and starts jitter buffer.
   void Start();
 
@@ -264,8 +266,6 @@
   // average_packets_per_frame converges fast if we have fewer than this many
   // frames.
   int frame_counter_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(VCMJitterBuffer);
 };
 }  // namespace webrtc
 
diff --git a/modules/video_coding/test/stream_generator.h b/modules/video_coding/test/stream_generator.h
index f542bab..ddb23eb 100644
--- a/modules/video_coding/test/stream_generator.h
+++ b/modules/video_coding/test/stream_generator.h
@@ -15,7 +15,6 @@
 #include <list>
 
 #include "modules/video_coding/packet.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace webrtc {
 
@@ -29,6 +28,10 @@
 class StreamGenerator {
  public:
   StreamGenerator(uint16_t start_seq_num, int64_t current_time);
+
+  StreamGenerator(const StreamGenerator&) = delete;
+  StreamGenerator& operator=(const StreamGenerator&) = delete;
+
   void Init(uint16_t start_seq_num, int64_t current_time);
 
   // `time_ms` denotes the timestamp you want to put on the frame, and the unit
@@ -64,8 +67,6 @@
   uint16_t sequence_number_;
   int64_t start_time_;
   uint8_t packet_buffer_[kMaxPacketSize];
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(StreamGenerator);
 };
 
 }  // namespace webrtc
diff --git a/modules/video_coding/utility/ivf_file_reader.h b/modules/video_coding/utility/ivf_file_reader.h
index cc64d4c..75f2e3a 100644
--- a/modules/video_coding/utility/ivf_file_reader.h
+++ b/modules/video_coding/utility/ivf_file_reader.h
@@ -17,7 +17,6 @@
 #include "absl/types/optional.h"
 #include "api/video/encoded_image.h"
 #include "api/video_codecs/video_codec.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/file_wrapper.h"
 
 namespace webrtc {
@@ -27,6 +26,10 @@
   // Creates IvfFileReader. Returns nullptr if error acquired.
   static std::unique_ptr<IvfFileReader> Create(FileWrapper file);
   ~IvfFileReader();
+
+  IvfFileReader(const IvfFileReader&) = delete;
+  IvfFileReader& operator=(const IvfFileReader&) = delete;
+
   // Reinitializes reader. Returns false if any error acquired.
   bool Reset();
 
@@ -72,8 +75,6 @@
 
   absl::optional<FrameHeader> next_frame_header_;
   bool has_error_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(IvfFileReader);
 };
 
 }  // namespace webrtc
diff --git a/modules/video_coding/utility/ivf_file_writer.h b/modules/video_coding/utility/ivf_file_writer.h
index 874f60a..b53459b 100644
--- a/modules/video_coding/utility/ivf_file_writer.h
+++ b/modules/video_coding/utility/ivf_file_writer.h
@@ -18,7 +18,6 @@
 
 #include "api/video/encoded_image.h"
 #include "api/video/video_codec_type.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/file_wrapper.h"
 #include "rtc_base/time_utils.h"
 
@@ -34,6 +33,9 @@
                                              size_t byte_limit);
   ~IvfFileWriter();
 
+  IvfFileWriter(const IvfFileWriter&) = delete;
+  IvfFileWriter& operator=(const IvfFileWriter&) = delete;
+
   bool WriteFrame(const EncodedImage& encoded_image, VideoCodecType codec_type);
   bool Close();
 
@@ -57,8 +59,6 @@
   bool using_capture_timestamps_;
   rtc::TimestampWrapAroundHandler wrap_handler_;
   FileWrapper file_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(IvfFileWriter);
 };
 
 }  // namespace webrtc
diff --git a/modules/video_coding/utility/simulcast_rate_allocator.h b/modules/video_coding/utility/simulcast_rate_allocator.h
index 9b2f969..6f93dbd 100644
--- a/modules/video_coding/utility/simulcast_rate_allocator.h
+++ b/modules/video_coding/utility/simulcast_rate_allocator.h
@@ -19,7 +19,6 @@
 #include "api/video/video_bitrate_allocation.h"
 #include "api/video/video_bitrate_allocator.h"
 #include "api/video_codecs/video_codec.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/experiments/rate_control_settings.h"
 #include "rtc_base/experiments/stable_target_rate_experiment.h"
 
@@ -30,6 +29,9 @@
   explicit SimulcastRateAllocator(const VideoCodec& codec);
   ~SimulcastRateAllocator() override;
 
+  SimulcastRateAllocator(const SimulcastRateAllocator&) = delete;
+  SimulcastRateAllocator& operator=(const SimulcastRateAllocator&) = delete;
+
   VideoBitrateAllocation Allocate(
       VideoBitrateAllocationParameters parameters) override;
   const VideoCodec& GetCodec() const;
@@ -61,8 +63,6 @@
   const RateControlSettings rate_control_settings_;
   std::vector<bool> stream_enabled_;
   bool legacy_conference_mode_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SimulcastRateAllocator);
 };
 
 }  // namespace webrtc
