diff --git a/rtc_base/async_invoker.h b/rtc_base/async_invoker.h
index e5a3c15..c1f2060 100644
--- a/rtc_base/async_invoker.h
+++ b/rtc_base/async_invoker.h
@@ -18,7 +18,6 @@
 #include "absl/base/attributes.h"
 #include "api/scoped_refptr.h"
 #include "rtc_base/async_invoker_inl.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/event.h"
 #include "rtc_base/ref_counted_object.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
@@ -94,6 +93,9 @@
   DEPRECATED_AsyncInvoker();
   ~DEPRECATED_AsyncInvoker() override;
 
+  DEPRECATED_AsyncInvoker(const DEPRECATED_AsyncInvoker&) = delete;
+  DEPRECATED_AsyncInvoker& operator=(const DEPRECATED_AsyncInvoker&) = delete;
+
   // Call `functor` asynchronously on `thread`, with no callback upon
   // completion. Returns immediately.
   template <class ReturnT, class FunctorT>
@@ -159,8 +161,6 @@
   std::atomic<bool> destroying_;
 
   friend class AsyncClosure;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(DEPRECATED_AsyncInvoker);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/async_packet_socket.h b/rtc_base/async_packet_socket.h
index b5fcf8e..2e334ec 100644
--- a/rtc_base/async_packet_socket.h
+++ b/rtc_base/async_packet_socket.h
@@ -13,7 +13,6 @@
 
 #include <vector>
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/dscp.h"
 #include "rtc_base/network/sent_packet.h"
 #include "rtc_base/socket.h"
@@ -69,6 +68,9 @@
   AsyncPacketSocket();
   ~AsyncPacketSocket() override;
 
+  AsyncPacketSocket(const AsyncPacketSocket&) = delete;
+  AsyncPacketSocket& operator=(const AsyncPacketSocket&) = delete;
+
   // Returns current local address. Address may be set to null if the
   // socket is not bound yet (GetState() returns STATE_BINDING).
   virtual SocketAddress GetLocalAddress() const = 0;
@@ -127,9 +129,6 @@
   // Emitted for client TCP sockets when state is changed from
   // CONNECTED to CLOSED.
   sigslot::signal2<AsyncPacketSocket*, int> SignalClose;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(AsyncPacketSocket);
 };
 
 // Listen socket, producing an AsyncPacketSocket when a peer connects.
diff --git a/rtc_base/async_tcp_socket.h b/rtc_base/async_tcp_socket.h
index ca61b54..541080f 100644
--- a/rtc_base/async_tcp_socket.h
+++ b/rtc_base/async_tcp_socket.h
@@ -17,7 +17,6 @@
 
 #include "rtc_base/async_packet_socket.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/socket.h"
 #include "rtc_base/socket_address.h"
 
@@ -31,6 +30,9 @@
   AsyncTCPSocketBase(Socket* socket, size_t max_packet_size);
   ~AsyncTCPSocketBase() override;
 
+  AsyncTCPSocketBase(const AsyncTCPSocketBase&) = delete;
+  AsyncTCPSocketBase& operator=(const AsyncTCPSocketBase&) = delete;
+
   // Pure virtual methods to send and recv data.
   int Send(const void* pv,
            size_t cb,
@@ -78,8 +80,6 @@
   Buffer outbuf_;
   size_t max_insize_;
   size_t max_outsize_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AsyncTCPSocketBase);
 };
 
 class AsyncTCPSocket : public AsyncTCPSocketBase {
@@ -93,13 +93,13 @@
   explicit AsyncTCPSocket(Socket* socket);
   ~AsyncTCPSocket() override {}
 
+  AsyncTCPSocket(const AsyncTCPSocket&) = delete;
+  AsyncTCPSocket& operator=(const AsyncTCPSocket&) = delete;
+
   int Send(const void* pv,
            size_t cb,
            const rtc::PacketOptions& options) override;
   void ProcessInput(char* data, size_t* len) override;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(AsyncTCPSocket);
 };
 
 class AsyncTcpListenSocket : public AsyncListenSocket {
diff --git a/rtc_base/bit_buffer.h b/rtc_base/bit_buffer.h
index 5375550..b4991bc 100644
--- a/rtc_base/bit_buffer.h
+++ b/rtc_base/bit_buffer.h
@@ -14,8 +14,6 @@
 #include <stddef.h>  // For size_t.
 #include <stdint.h>  // For integer types.
 
-#include "rtc_base/constructor_magic.h"
-
 namespace rtc {
 
 // A BitBuffer API for write operations. Supports symmetric write APIs to the
@@ -27,6 +25,9 @@
   // Constructs a bit buffer for the writable buffer of `bytes`.
   BitBufferWriter(uint8_t* bytes, size_t byte_count);
 
+  BitBufferWriter(const BitBufferWriter&) = delete;
+  BitBufferWriter& operator=(const BitBufferWriter&) = delete;
+
   // Gets the current offset, in bytes/bits, from the start of the buffer. The
   // bit offset is the offset into the current byte, in the range [0,7].
   void GetCurrentOffset(size_t* out_byte_offset, size_t* out_bit_offset);
@@ -80,8 +81,6 @@
   size_t byte_offset_;
   // The current offset, in bits, into the current byte.
   size_t bit_offset_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(BitBufferWriter);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/boringssl_certificate.h b/rtc_base/boringssl_certificate.h
index 40a4bd8..8b4577a 100644
--- a/rtc_base/boringssl_certificate.h
+++ b/rtc_base/boringssl_certificate.h
@@ -19,7 +19,6 @@
 #include <string>
 
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/ssl_certificate.h"
 #include "rtc_base/ssl_identity.h"
 
@@ -43,6 +42,9 @@
 
   ~BoringSSLCertificate() override;
 
+  BoringSSLCertificate(const BoringSSLCertificate&) = delete;
+  BoringSSLCertificate& operator=(const BoringSSLCertificate&) = delete;
+
   std::unique_ptr<SSLCertificate> Clone() const override;
 
   CRYPTO_BUFFER* cert_buffer() const { return cert_buffer_.get(); }
@@ -72,7 +74,6 @@
  private:
   // A handle to the DER encoded certificate data.
   bssl::UniquePtr<CRYPTO_BUFFER> cert_buffer_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(BoringSSLCertificate);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/boringssl_identity.h b/rtc_base/boringssl_identity.h
index 71b29b4..e322afa 100644
--- a/rtc_base/boringssl_identity.h
+++ b/rtc_base/boringssl_identity.h
@@ -18,7 +18,6 @@
 #include <string>
 
 #include "rtc_base/boringssl_certificate.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/openssl_key_pair.h"
 #include "rtc_base/ssl_certificate.h"
 #include "rtc_base/ssl_identity.h"
@@ -44,6 +43,9 @@
       const std::string& certificate_chain);
   ~BoringSSLIdentity() override;
 
+  BoringSSLIdentity(const BoringSSLIdentity&) = delete;
+  BoringSSLIdentity& operator=(const BoringSSLIdentity&) = delete;
+
   const BoringSSLCertificate& certificate() const override;
   const SSLCertChain& cert_chain() const override;
 
@@ -67,8 +69,6 @@
 
   std::unique_ptr<OpenSSLKeyPair> key_pair_;
   std::unique_ptr<SSLCertChain> cert_chain_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(BoringSSLIdentity);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/buffer_queue.h b/rtc_base/buffer_queue.h
index ee435f4..b018e16 100644
--- a/rtc_base/buffer_queue.h
+++ b/rtc_base/buffer_queue.h
@@ -18,7 +18,6 @@
 
 #include "api/sequence_checker.h"
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/no_unique_address.h"
 #include "rtc_base/thread_annotations.h"
 
@@ -30,6 +29,9 @@
   BufferQueue(size_t capacity, size_t default_size);
   ~BufferQueue();
 
+  BufferQueue(const BufferQueue&) = delete;
+  BufferQueue& operator=(const BufferQueue&) = delete;
+
   // Return number of queued buffers.
   size_t size() const;
 
@@ -61,8 +63,6 @@
   const size_t default_size_;
   std::deque<Buffer*> queue_ RTC_GUARDED_BY(sequence_checker_);
   std::vector<Buffer*> free_list_ RTC_GUARDED_BY(sequence_checker_);
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(BufferQueue);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/byte_buffer.h b/rtc_base/byte_buffer.h
index fc383f0..d2dda3c 100644
--- a/rtc_base/byte_buffer.h
+++ b/rtc_base/byte_buffer.h
@@ -18,7 +18,6 @@
 
 #include "rtc_base/buffer.h"
 #include "rtc_base/byte_order.h"
-#include "rtc_base/constructor_magic.h"
 
 // Reads/Writes from/to buffer using network byte order (big endian)
 namespace rtc {
@@ -29,6 +28,9 @@
   ByteBufferWriterT() { Construct(nullptr, kDefaultCapacity); }
   ByteBufferWriterT(const char* bytes, size_t len) { Construct(bytes, len); }
 
+  ByteBufferWriterT(const ByteBufferWriterT&) = delete;
+  ByteBufferWriterT& operator=(const ByteBufferWriterT&) = delete;
+
   const char* Data() const { return buffer_.data(); }
   size_t Length() const { return buffer_.size(); }
   size_t Capacity() const { return buffer_.capacity(); }
@@ -104,7 +106,6 @@
 
   // There are sensible ways to define these, but they aren't needed in our code
   // base.
-  RTC_DISALLOW_COPY_AND_ASSIGN(ByteBufferWriterT);
 };
 
 class ByteBufferWriter : public ByteBufferWriterT<BufferT<char>> {
@@ -112,8 +113,8 @@
   ByteBufferWriter();
   ByteBufferWriter(const char* bytes, size_t len);
 
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(ByteBufferWriter);
+  ByteBufferWriter(const ByteBufferWriter&) = delete;
+  ByteBufferWriter& operator=(const ByteBufferWriter&) = delete;
 };
 
 // The ByteBufferReader references the passed data, i.e. the pointer must be
@@ -129,6 +130,9 @@
 
   explicit ByteBufferReader(const ByteBufferWriter& buf);
 
+  ByteBufferReader(const ByteBufferReader&) = delete;
+  ByteBufferReader& operator=(const ByteBufferReader&) = delete;
+
   // Returns start of unprocessed data.
   const char* Data() const { return bytes_ + start_; }
   // Returns number of unprocessed bytes.
@@ -161,9 +165,6 @@
   size_t size_;
   size_t start_;
   size_t end_;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(ByteBufferReader);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/deprecated/recursive_critical_section.h b/rtc_base/deprecated/recursive_critical_section.h
index 15b1f97..cc308e4 100644
--- a/rtc_base/deprecated/recursive_critical_section.h
+++ b/rtc_base/deprecated/recursive_critical_section.h
@@ -11,7 +11,6 @@
 #ifndef RTC_BASE_DEPRECATED_RECURSIVE_CRITICAL_SECTION_H_
 #define RTC_BASE_DEPRECATED_RECURSIVE_CRITICAL_SECTION_H_
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/platform_thread_types.h"
 #include "rtc_base/thread_annotations.h"
 
@@ -94,9 +93,11 @@
       RTC_EXCLUSIVE_LOCK_FUNCTION(cs);
   ~CritScope() RTC_UNLOCK_FUNCTION();
 
+  CritScope(const CritScope&) = delete;
+  CritScope& operator=(const CritScope&) = delete;
+
  private:
   const RecursiveCriticalSection* const cs_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(CritScope);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/file_rotating_stream.h b/rtc_base/file_rotating_stream.h
index beb47c8..6aaa0bd 100644
--- a/rtc_base/file_rotating_stream.h
+++ b/rtc_base/file_rotating_stream.h
@@ -17,7 +17,6 @@
 #include <string>
 #include <vector>
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/file_wrapper.h"
 
 namespace rtc {
@@ -37,6 +36,9 @@
 
   virtual ~FileRotatingStream();
 
+  FileRotatingStream(const FileRotatingStream&) = delete;
+  FileRotatingStream& operator=(const FileRotatingStream&) = delete;
+
   bool IsOpen() const;
 
   bool Write(const void* data, size_t data_len);
@@ -100,8 +102,6 @@
   // buffering the file size read from disk might not be accurate.
   size_t current_bytes_written_;
   bool disable_buffering_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(FileRotatingStream);
 };
 
 // CallSessionFileRotatingStream is meant to be used in situations where we will
@@ -130,6 +130,10 @@
                                 size_t max_total_log_size);
   ~CallSessionFileRotatingStream() override {}
 
+  CallSessionFileRotatingStream(const CallSessionFileRotatingStream&) = delete;
+  CallSessionFileRotatingStream& operator=(
+      const CallSessionFileRotatingStream&) = delete;
+
  protected:
   void OnRotation() override;
 
@@ -140,8 +144,6 @@
 
   const size_t max_total_log_size_;
   size_t num_rotations_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(CallSessionFileRotatingStream);
 };
 
 // This is a convenience class, to read all files produced by a
diff --git a/rtc_base/log_sinks.h b/rtc_base/log_sinks.h
index 87bec6d..d2c286a 100644
--- a/rtc_base/log_sinks.h
+++ b/rtc_base/log_sinks.h
@@ -16,7 +16,6 @@
 #include <memory>
 #include <string>
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/file_rotating_stream.h"
 #include "rtc_base/logging.h"
 
@@ -34,6 +33,9 @@
                       size_t num_log_files);
   ~FileRotatingLogSink() override;
 
+  FileRotatingLogSink(const FileRotatingLogSink&) = delete;
+  FileRotatingLogSink& operator=(const FileRotatingLogSink&) = delete;
+
   // Writes the message to the current file. It will spill over to the next
   // file if needed.
   void OnLogMessage(const std::string& message) override;
@@ -52,8 +54,6 @@
 
  private:
   std::unique_ptr<FileRotatingStream> stream_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(FileRotatingLogSink);
 };
 
 // Log sink that uses a CallSessionFileRotatingStream to write to disk.
@@ -64,8 +64,10 @@
                                  size_t max_total_log_size);
   ~CallSessionFileRotatingLogSink() override;
 
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(CallSessionFileRotatingLogSink);
+  CallSessionFileRotatingLogSink(const CallSessionFileRotatingLogSink&) =
+      delete;
+  CallSessionFileRotatingLogSink& operator=(
+      const CallSessionFileRotatingLogSink&) = delete;
 };
 
 }  // namespace rtc
diff --git a/rtc_base/logging.h b/rtc_base/logging.h
index 3ac12d7..b981357 100644
--- a/rtc_base/logging.h
+++ b/rtc_base/logging.h
@@ -54,7 +54,6 @@
 #include "absl/base/attributes.h"
 #include "absl/meta/type_traits.h"
 #include "absl/strings/string_view.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/system/inline.h"
 
@@ -443,6 +442,9 @@
              const std::string& tag);
   ~LogMessage();
 
+  LogMessage(const LogMessage&) = delete;
+  LogMessage& operator=(const LogMessage&) = delete;
+
   void AddTag(const char* tag);
   rtc::StringBuilder& stream();
   // Returns the time at which this function was called for the first time.
@@ -602,8 +604,6 @@
 
   // The stringbuilder that buffers the formatted message before output
   rtc::StringBuilder print_stream_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(LogMessage);
 };
 
 //////////////////////////////////////////////////////////////////////
diff --git a/rtc_base/memory/fifo_buffer.h b/rtc_base/memory/fifo_buffer.h
index 0bc943a..e3d29f4 100644
--- a/rtc_base/memory/fifo_buffer.h
+++ b/rtc_base/memory/fifo_buffer.h
@@ -29,6 +29,10 @@
   // Creates a FIFO buffer with the specified capacity and owner
   FifoBuffer(size_t length, Thread* owner);
   ~FifoBuffer() override;
+
+  FifoBuffer(const FifoBuffer&) = delete;
+  FifoBuffer& operator=(const FifoBuffer&) = delete;
+
   // Gets the amount of data currently readable from the buffer.
   bool GetBuffered(size_t* data_len) const;
 
@@ -110,7 +114,6 @@
   Thread* const owner_;
   // object lock
   mutable webrtc::Mutex mutex_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(FifoBuffer);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/message_handler.h b/rtc_base/message_handler.h
index 62c8344..c5e05ca 100644
--- a/rtc_base/message_handler.h
+++ b/rtc_base/message_handler.h
@@ -14,7 +14,6 @@
 #include <utility>
 
 #include "api/function_view.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace rtc {
@@ -37,11 +36,12 @@
  public:
   ~MessageHandlerAutoCleanup() override;
 
+  MessageHandlerAutoCleanup(const MessageHandlerAutoCleanup&) = delete;
+  MessageHandlerAutoCleanup& operator=(const MessageHandlerAutoCleanup&) =
+      delete;
+
  protected:
   MessageHandlerAutoCleanup();
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(MessageHandlerAutoCleanup);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/nat_server.h b/rtc_base/nat_server.h
index 5078fbb..acbd62a 100644
--- a/rtc_base/nat_server.h
+++ b/rtc_base/nat_server.h
@@ -15,7 +15,6 @@
 #include <set>
 
 #include "rtc_base/async_udp_socket.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/nat_types.h"
 #include "rtc_base/proxy_server.h"
 #include "rtc_base/socket_address_pair.h"
@@ -69,6 +68,9 @@
             const SocketAddress& external_ip);
   ~NATServer() override;
 
+  NATServer(const NATServer&) = delete;
+  NATServer& operator=(const NATServer&) = delete;
+
   SocketAddress internal_udp_address() const {
     return udp_server_socket_->GetLocalAddress();
   }
@@ -122,7 +124,6 @@
   ProxyServer* tcp_proxy_server_;
   InternalMap* int_map_;
   ExternalMap* ext_map_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(NATServer);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/nat_socket_factory.h b/rtc_base/nat_socket_factory.h
index 9b1d2f0..70cb303 100644
--- a/rtc_base/nat_socket_factory.h
+++ b/rtc_base/nat_socket_factory.h
@@ -17,7 +17,6 @@
 #include <memory>
 #include <set>
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/nat_server.h"
 #include "rtc_base/nat_types.h"
 #include "rtc_base/socket.h"
@@ -50,6 +49,9 @@
                    const SocketAddress& nat_udp_addr,
                    const SocketAddress& nat_tcp_addr);
 
+  NATSocketFactory(const NATSocketFactory&) = delete;
+  NATSocketFactory& operator=(const NATSocketFactory&) = delete;
+
   // SocketFactory implementation
   Socket* CreateSocket(int family, int type) override;
 
@@ -63,7 +65,6 @@
   SocketFactory* factory_;
   SocketAddress nat_udp_addr_;
   SocketAddress nat_tcp_addr_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(NATSocketFactory);
 };
 
 // Creates sockets that will send traffic through a NAT depending on what
@@ -135,6 +136,9 @@
 
   explicit NATSocketServer(SocketServer* ss);
 
+  NATSocketServer(const NATSocketServer&) = delete;
+  NATSocketServer& operator=(const NATSocketServer&) = delete;
+
   SocketServer* socketserver() { return server_; }
   Thread* queue() { return msg_queue_; }
 
@@ -161,7 +165,6 @@
   SocketServer* server_;
   Thread* msg_queue_;
   TranslatorMap nats_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(NATSocketServer);
 };
 
 // Free-standing NAT helper functions.
diff --git a/rtc_base/numerics/moving_max_counter.h b/rtc_base/numerics/moving_max_counter.h
index 26dd506..5eb45d39 100644
--- a/rtc_base/numerics/moving_max_counter.h
+++ b/rtc_base/numerics/moving_max_counter.h
@@ -19,7 +19,6 @@
 
 #include "absl/types/optional.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 
 namespace rtc {
 
@@ -34,6 +33,10 @@
 class MovingMaxCounter {
  public:
   explicit MovingMaxCounter(int64_t window_length_ms);
+
+  MovingMaxCounter(const MovingMaxCounter&) = delete;
+  MovingMaxCounter& operator=(const MovingMaxCounter&) = delete;
+
   // Advances the current time, and adds a new sample. The new current time must
   // be at least as large as the old current time.
   void Add(const T& sample, int64_t current_time_ms);
@@ -57,7 +60,6 @@
 #if RTC_DCHECK_IS_ON
   int64_t last_call_time_ms_ = std::numeric_limits<int64_t>::min();
 #endif
-  RTC_DISALLOW_COPY_AND_ASSIGN(MovingMaxCounter);
 };
 
 template <class T>
diff --git a/rtc_base/numerics/moving_median_filter.h b/rtc_base/numerics/moving_median_filter.h
index 157eb15..2a8ea7d 100644
--- a/rtc_base/numerics/moving_median_filter.h
+++ b/rtc_base/numerics/moving_median_filter.h
@@ -17,7 +17,6 @@
 #include <list>
 
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/numerics/percentile_filter.h"
 
 namespace webrtc {
@@ -30,6 +29,9 @@
   // used to take median. `window_size` must be positive.
   explicit MovingMedianFilter(size_t window_size);
 
+  MovingMedianFilter(const MovingMedianFilter&) = delete;
+  MovingMedianFilter& operator=(const MovingMedianFilter&) = delete;
+
   // Insert a new sample.
   void Insert(const T& value);
 
@@ -47,8 +49,6 @@
   std::list<T> samples_;
   size_t samples_stored_;
   const size_t window_size_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(MovingMedianFilter);
 };
 
 template <typename T>
diff --git a/rtc_base/numerics/percentile_filter_unittest.cc b/rtc_base/numerics/percentile_filter_unittest.cc
index 0de8be5..d6baa32 100644
--- a/rtc_base/numerics/percentile_filter_unittest.cc
+++ b/rtc_base/numerics/percentile_filter_unittest.cc
@@ -18,7 +18,6 @@
 #include <random>
 
 #include "absl/algorithm/container.h"
-#include "rtc_base/constructor_magic.h"
 #include "test/gtest.h"
 
 namespace webrtc {
@@ -30,11 +29,11 @@
     srand(42);
   }
 
+  PercentileFilterTest(const PercentileFilterTest&) = delete;
+  PercentileFilterTest& operator=(const PercentileFilterTest&) = delete;
+
  protected:
   PercentileFilter<int64_t> filter_;
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(PercentileFilterTest);
 };
 
 INSTANTIATE_TEST_SUITE_P(PercentileFilterTests,
diff --git a/rtc_base/openssl_key_pair.h b/rtc_base/openssl_key_pair.h
index a84c43b..d9a4939 100644
--- a/rtc_base/openssl_key_pair.h
+++ b/rtc_base/openssl_key_pair.h
@@ -17,7 +17,6 @@
 #include <string>
 
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/ssl_identity.h"
 
 namespace rtc {
@@ -39,6 +38,9 @@
 
   ~OpenSSLKeyPair();
 
+  OpenSSLKeyPair(const OpenSSLKeyPair&) = delete;
+  OpenSSLKeyPair& operator=(const OpenSSLKeyPair&) = delete;
+
   std::unique_ptr<OpenSSLKeyPair> Clone();
 
   EVP_PKEY* pkey() const { return pkey_; }
@@ -51,8 +53,6 @@
   void AddReference();
 
   EVP_PKEY* pkey_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(OpenSSLKeyPair);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/openssl_session_cache.h b/rtc_base/openssl_session_cache.h
index b049e64..b801ec7 100644
--- a/rtc_base/openssl_session_cache.h
+++ b/rtc_base/openssl_session_cache.h
@@ -16,7 +16,6 @@
 #include <map>
 #include <string>
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/ssl_stream_adapter.h"
 
 #ifndef OPENSSL_IS_BORINGSSL
@@ -36,6 +35,10 @@
   OpenSSLSessionCache(SSLMode ssl_mode, SSL_CTX* ssl_ctx);
   // Frees the cached SSL_SESSIONS and then frees the SSL_CTX.
   ~OpenSSLSessionCache();
+
+  OpenSSLSessionCache(const OpenSSLSessionCache&) = delete;
+  OpenSSLSessionCache& operator=(const OpenSSLSessionCache&) = delete;
+
   // Looks up a session by hostname. The returned SSL_SESSION is not up_refed.
   SSL_SESSION* LookupSession(const std::string& hostname) const;
   // Adds a session to the cache, and up_refs it. Any existing session with the
@@ -60,7 +63,6 @@
   // TODO(juberti): Add LRU eviction to keep the cache from growing forever.
   std::map<std::string, SSL_SESSION*> sessions_;
   // The cache should never be copied or assigned directly.
-  RTC_DISALLOW_COPY_AND_ASSIGN(OpenSSLSessionCache);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/operations_chain.h b/rtc_base/operations_chain.h
index e6fb4f9..0e8c068 100644
--- a/rtc_base/operations_chain.h
+++ b/rtc_base/operations_chain.h
@@ -23,7 +23,6 @@
 #include "api/scoped_refptr.h"
 #include "api/sequence_checker.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/ref_count.h"
 #include "rtc_base/ref_counted_object.h"
 #include "rtc_base/system/no_unique_address.h"
@@ -119,6 +118,9 @@
   static scoped_refptr<OperationsChain> Create();
   ~OperationsChain();
 
+  OperationsChain(const OperationsChain&) = delete;
+  OperationsChain& operator=(const OperationsChain&) = delete;
+
   void SetOnChainEmptyCallback(std::function<void()> on_chain_empty_callback);
   bool IsEmpty() const;
 
@@ -169,6 +171,9 @@
     explicit CallbackHandle(scoped_refptr<OperationsChain> operations_chain);
     ~CallbackHandle();
 
+    CallbackHandle(const CallbackHandle&) = delete;
+    CallbackHandle& operator=(const CallbackHandle&) = delete;
+
     void OnOperationComplete();
 
    private:
@@ -176,8 +181,6 @@
 #if RTC_DCHECK_IS_ON
     bool has_run_ = false;
 #endif  // RTC_DCHECK_IS_ON
-
-    RTC_DISALLOW_COPY_AND_ASSIGN(CallbackHandle);
   };
 
   OperationsChain();
@@ -193,8 +196,6 @@
       chained_operations_ RTC_GUARDED_BY(sequence_checker_);
   absl::optional<std::function<void()>> on_chain_empty_callback_
       RTC_GUARDED_BY(sequence_checker_);
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(OperationsChain);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/operations_chain_unittest.cc b/rtc_base/operations_chain_unittest.cc
index f99c05e..a66df5b 100644
--- a/rtc_base/operations_chain_unittest.cc
+++ b/rtc_base/operations_chain_unittest.cc
@@ -219,6 +219,9 @@
     }
   }
 
+  SignalOnDestruction(const SignalOnDestruction&) = delete;
+  SignalOnDestruction& operator=(const SignalOnDestruction&) = delete;
+
   // Move operators.
   SignalOnDestruction(SignalOnDestruction&& other)
       : SignalOnDestruction(other.destructor_called_) {
@@ -232,8 +235,6 @@
 
  private:
   bool* destructor_called_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SignalOnDestruction);
 };
 
 TEST(OperationsChainTest, SynchronousOperation) {
diff --git a/rtc_base/proxy_server.h b/rtc_base/proxy_server.h
index 6db0e12..0b9b655 100644
--- a/rtc_base/proxy_server.h
+++ b/rtc_base/proxy_server.h
@@ -15,7 +15,6 @@
 #include <vector>
 
 #include "absl/memory/memory.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/memory/fifo_buffer.h"
 #include "rtc_base/server_socket_adapters.h"
 #include "rtc_base/socket.h"
@@ -36,6 +35,10 @@
  public:
   ProxyBinding(AsyncProxyServerSocket* in_socket, Socket* out_socket);
   ~ProxyBinding() override;
+
+  ProxyBinding(const ProxyBinding&) = delete;
+  ProxyBinding& operator=(const ProxyBinding&) = delete;
+
   sigslot::signal1<ProxyBinding*> SignalDestroyed;
 
  private:
@@ -59,7 +62,6 @@
   bool connected_;
   FifoBuffer out_buffer_;
   FifoBuffer in_buffer_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(ProxyBinding);
 };
 
 class ProxyServer : public sigslot::has_slots<> {
@@ -70,6 +72,9 @@
               const SocketAddress& ext_ip);
   ~ProxyServer() override;
 
+  ProxyServer(const ProxyServer&) = delete;
+  ProxyServer& operator=(const ProxyServer&) = delete;
+
   // Returns the address to which the proxy server is bound
   SocketAddress GetServerAddress();
 
@@ -82,7 +87,6 @@
   SocketAddress ext_ip_;
   std::unique_ptr<Socket> server_socket_;
   std::vector<std::unique_ptr<ProxyBinding>> bindings_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(ProxyServer);
 };
 
 // SocksProxyServer is a simple extension of ProxyServer to implement SOCKS.
@@ -94,9 +98,11 @@
                    const SocketAddress& ext_ip)
       : ProxyServer(int_factory, int_addr, ext_factory, ext_ip) {}
 
+  SocksProxyServer(const SocksProxyServer&) = delete;
+  SocksProxyServer& operator=(const SocksProxyServer&) = delete;
+
  protected:
   AsyncProxyServerSocket* WrapSocket(Socket* socket) override;
-  RTC_DISALLOW_COPY_AND_ASSIGN(SocksProxyServer);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/ref_counted_object.h b/rtc_base/ref_counted_object.h
index 274eb9e..54aac95 100644
--- a/rtc_base/ref_counted_object.h
+++ b/rtc_base/ref_counted_object.h
@@ -14,7 +14,6 @@
 #include <utility>
 
 #include "api/scoped_refptr.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/ref_count.h"
 #include "rtc_base/ref_counter.h"
 
@@ -42,6 +41,9 @@
  public:
   RefCountedObject() {}
 
+  RefCountedObject(const RefCountedObject&) = delete;
+  RefCountedObject& operator=(const RefCountedObject&) = delete;
+
   template <class P0>
   explicit RefCountedObject(P0&& p0) : T(std::forward<P0>(p0)) {}
 
@@ -73,8 +75,6 @@
   ~RefCountedObject() override {}
 
   mutable webrtc::webrtc_impl::RefCounter ref_count_{0};
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RefCountedObject);
 };
 
 template <class T>
diff --git a/rtc_base/ref_counted_object_unittest.cc b/rtc_base/ref_counted_object_unittest.cc
index ab7bb09..6b794e6 100644
--- a/rtc_base/ref_counted_object_unittest.cc
+++ b/rtc_base/ref_counted_object_unittest.cc
@@ -27,8 +27,8 @@
  public:
   A() {}
 
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(A);
+  A(const A&) = delete;
+  A& operator=(const A&) = delete;
 };
 
 class RefClass : public RefCountInterface {
diff --git a/rtc_base/rolling_accumulator.h b/rtc_base/rolling_accumulator.h
index 241bd72..84d791e 100644
--- a/rtc_base/rolling_accumulator.h
+++ b/rtc_base/rolling_accumulator.h
@@ -17,7 +17,6 @@
 #include <vector>
 
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/numerics/running_statistics.h"
 
 namespace rtc {
@@ -35,6 +34,9 @@
   }
   ~RollingAccumulator() {}
 
+  RollingAccumulator(const RollingAccumulator&) = delete;
+  RollingAccumulator& operator=(const RollingAccumulator&) = delete;
+
   size_t max_count() const { return samples_.size(); }
 
   size_t count() const { return static_cast<size_t>(stats_.Size()); }
@@ -136,8 +138,6 @@
   mutable T min_;
   mutable bool min_stale_;
   std::vector<T> samples_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(RollingAccumulator);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/server_socket_adapters.h b/rtc_base/server_socket_adapters.h
index 07e9636..b18c7a6 100644
--- a/rtc_base/server_socket_adapters.h
+++ b/rtc_base/server_socket_adapters.h
@@ -31,9 +31,11 @@
  public:
   explicit AsyncSSLServerSocket(Socket* socket);
 
+  AsyncSSLServerSocket(const AsyncSSLServerSocket&) = delete;
+  AsyncSSLServerSocket& operator=(const AsyncSSLServerSocket&) = delete;
+
  protected:
   void ProcessInput(char* data, size_t* len) override;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AsyncSSLServerSocket);
 };
 
 // Implements a proxy server socket for the SOCKS protocol.
@@ -41,6 +43,10 @@
  public:
   explicit AsyncSocksProxyServerSocket(Socket* socket);
 
+  AsyncSocksProxyServerSocket(const AsyncSocksProxyServerSocket&) = delete;
+  AsyncSocksProxyServerSocket& operator=(const AsyncSocksProxyServerSocket&) =
+      delete;
+
  private:
   void ProcessInput(char* data, size_t* len) override;
   void DirectSend(const ByteBufferWriter& buf);
@@ -64,7 +70,6 @@
     SS_ERROR
   };
   State state_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AsyncSocksProxyServerSocket);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/sigslot_tester.h b/rtc_base/sigslot_tester.h
index 58be511..92483c0 100644
--- a/rtc_base/sigslot_tester.h
+++ b/rtc_base/sigslot_tester.h
@@ -38,7 +38,6 @@
 //   EXPECT_EQ("hello", capture);
 //   /* See unit-tests for more examples */
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
 
 namespace rtc {
@@ -50,13 +49,14 @@
     signal->connect(this, &SigslotTester0::OnSignalCallback);
   }
 
+  SigslotTester0(const SigslotTester0&) = delete;
+  SigslotTester0& operator=(const SigslotTester0&) = delete;
+
   int callback_count() const { return callback_count_; }
 
  private:
   void OnSignalCallback() { callback_count_++; }
   int callback_count_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SigslotTester0);
 };
 
 // Versions below are for testing signals that pass arguments. For all the
@@ -74,6 +74,9 @@
     signal->connect(this, &SigslotTester1::OnSignalCallback);
   }
 
+  SigslotTester1(const SigslotTester1&) = delete;
+  SigslotTester1& operator=(const SigslotTester1&) = delete;
+
   int callback_count() const { return callback_count_; }
 
  private:
@@ -84,8 +87,6 @@
 
   int callback_count_;
   C1* capture1_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SigslotTester1);
 };
 
 template <class A1, class A2, class C1, class C2>
@@ -96,6 +97,9 @@
     signal->connect(this, &SigslotTester2::OnSignalCallback);
   }
 
+  SigslotTester2(const SigslotTester2&) = delete;
+  SigslotTester2& operator=(const SigslotTester2&) = delete;
+
   int callback_count() const { return callback_count_; }
 
  private:
@@ -108,8 +112,6 @@
   int callback_count_;
   C1* capture1_;
   C2* capture2_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SigslotTester2);
 };
 
 template <class A1, class A2, class A3, class C1, class C2, class C3>
@@ -126,6 +128,9 @@
     signal->connect(this, &SigslotTester3::OnSignalCallback);
   }
 
+  SigslotTester3(const SigslotTester3&) = delete;
+  SigslotTester3& operator=(const SigslotTester3&) = delete;
+
   int callback_count() const { return callback_count_; }
 
  private:
@@ -140,8 +145,6 @@
   C1* capture1_;
   C2* capture2_;
   C3* capture3_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SigslotTester3);
 };
 
 template <class A1,
@@ -167,6 +170,9 @@
     signal->connect(this, &SigslotTester4::OnSignalCallback);
   }
 
+  SigslotTester4(const SigslotTester4&) = delete;
+  SigslotTester4& operator=(const SigslotTester4&) = delete;
+
   int callback_count() const { return callback_count_; }
 
  private:
@@ -183,8 +189,6 @@
   C2* capture2_;
   C3* capture3_;
   C4* capture4_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SigslotTester4);
 };
 
 template <class A1,
@@ -214,6 +218,9 @@
     signal->connect(this, &SigslotTester5::OnSignalCallback);
   }
 
+  SigslotTester5(const SigslotTester5&) = delete;
+  SigslotTester5& operator=(const SigslotTester5&) = delete;
+
   int callback_count() const { return callback_count_; }
 
  private:
@@ -232,8 +239,6 @@
   C3* capture3_;
   C4* capture4_;
   C5* capture5_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SigslotTester5);
 };
 }  // namespace rtc
 
diff --git a/rtc_base/socket.h b/rtc_base/socket.h
index 6482117..0ed3a7f 100644
--- a/rtc_base/socket.h
+++ b/rtc_base/socket.h
@@ -25,7 +25,6 @@
 #include "rtc_base/win32.h"
 #endif
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
 
@@ -83,6 +82,9 @@
  public:
   virtual ~Socket() {}
 
+  Socket(const Socket&) = delete;
+  Socket& operator=(const Socket&) = delete;
+
   // Returns the address to which the socket is bound.  If the socket is not
   // bound, then the any-address is returned.
   virtual SocketAddress GetLocalAddress() const = 0;
@@ -138,9 +140,6 @@
 
  protected:
   Socket() {}
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(Socket);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/socket_adapters.h b/rtc_base/socket_adapters.h
index 67d3bbf..55f6211 100644
--- a/rtc_base/socket_adapters.h
+++ b/rtc_base/socket_adapters.h
@@ -15,7 +15,6 @@
 
 #include "api/array_view.h"
 #include "rtc_base/async_socket.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/crypt_string.h"
 
 namespace rtc {
@@ -34,6 +33,9 @@
   BufferedReadAdapter(Socket* socket, size_t buffer_size);
   ~BufferedReadAdapter() override;
 
+  BufferedReadAdapter(const BufferedReadAdapter&) = delete;
+  BufferedReadAdapter& operator=(const BufferedReadAdapter&) = delete;
+
   int Send(const void* pv, size_t cb) override;
   int Recv(void* pv, size_t cb, int64_t* timestamp) override;
 
@@ -51,7 +53,6 @@
   char* buffer_;
   size_t buffer_size_, data_len_;
   bool buffering_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(BufferedReadAdapter);
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -65,12 +66,14 @@
 
   explicit AsyncSSLSocket(Socket* socket);
 
+  AsyncSSLSocket(const AsyncSSLSocket&) = delete;
+  AsyncSSLSocket& operator=(const AsyncSSLSocket&) = delete;
+
   int Connect(const SocketAddress& addr) override;
 
  protected:
   void OnConnectEvent(Socket* socket) override;
   void ProcessInput(char* data, size_t* len) override;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AsyncSSLSocket);
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -85,6 +88,9 @@
                         const CryptString& password);
   ~AsyncHttpsProxySocket() override;
 
+  AsyncHttpsProxySocket(const AsyncHttpsProxySocket&) = delete;
+  AsyncHttpsProxySocket& operator=(const AsyncHttpsProxySocket&) = delete;
+
   // If connect is forced, the adapter will always issue an HTTP CONNECT to the
   // target address.  Otherwise, it will connect only if the destination port
   // is not port 80.
@@ -128,7 +134,6 @@
   } state_;
   HttpAuthContext* context_;
   std::string unknown_mechanisms_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AsyncHttpsProxySocket);
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -142,6 +147,9 @@
                         const CryptString& password);
   ~AsyncSocksProxySocket() override;
 
+  AsyncSocksProxySocket(const AsyncSocksProxySocket&) = delete;
+  AsyncSocksProxySocket& operator=(const AsyncSocksProxySocket&) = delete;
+
   int Connect(const SocketAddress& addr) override;
   SocketAddress GetRemoteAddress() const override;
   int Close() override;
@@ -162,7 +170,6 @@
   SocketAddress proxy_, dest_;
   std::string user_;
   CryptString pass_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(AsyncSocksProxySocket);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/socket_stream.h b/rtc_base/socket_stream.h
index 266a6e6..f678f80 100644
--- a/rtc_base/socket_stream.h
+++ b/rtc_base/socket_stream.h
@@ -13,7 +13,6 @@
 
 #include <stddef.h>
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/socket.h"
 #include "rtc_base/stream.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
@@ -27,6 +26,9 @@
   explicit SocketStream(Socket* socket);
   ~SocketStream() override;
 
+  SocketStream(const SocketStream&) = delete;
+  SocketStream& operator=(const SocketStream&) = delete;
+
   void Attach(Socket* socket);
   Socket* Detach();
 
@@ -53,8 +55,6 @@
   void OnCloseEvent(Socket* socket, int err);
 
   Socket* socket_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SocketStream);
 };
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/rtc_base/ssl_certificate.h b/rtc_base/ssl_certificate.h
index 3b3f24f..d0e60ee 100644
--- a/rtc_base/ssl_certificate.h
+++ b/rtc_base/ssl_certificate.h
@@ -17,12 +17,12 @@
 
 #include <stddef.h>
 #include <stdint.h>
+
 #include <memory>
 #include <string>
 #include <vector>
 
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace rtc {
@@ -101,6 +101,9 @@
 
   ~SSLCertChain();
 
+  SSLCertChain(const SSLCertChain&) = delete;
+  SSLCertChain& operator=(const SSLCertChain&) = delete;
+
   // Vector access methods.
   size_t GetSize() const { return certs_.size(); }
 
@@ -118,8 +121,6 @@
 
  private:
   std::vector<std::unique_ptr<SSLCertificate>> certs_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(SSLCertChain);
 };
 
 // SSLCertificateVerifier provides a simple interface to allow third parties to
diff --git a/rtc_base/stream.h b/rtc_base/stream.h
index 70de65a..c0ceb4e 100644
--- a/rtc_base/stream.h
+++ b/rtc_base/stream.h
@@ -14,7 +14,6 @@
 #include <memory>
 
 #include "rtc_base/buffer.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/message_handler.h"
 #include "rtc_base/system/rtc_export.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
@@ -52,6 +51,9 @@
  public:
   virtual ~StreamInterface() {}
 
+  StreamInterface(const StreamInterface&) = delete;
+  StreamInterface& operator=(const StreamInterface&) = delete;
+
   virtual StreamState GetState() const = 0;
 
   // Read attempts to fill buffer of size buffer_len.  Write attempts to send
@@ -110,9 +112,6 @@
 
  protected:
   StreamInterface();
-
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(StreamInterface);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/task_queue.h b/rtc_base/task_queue.h
index 86d3597..1798d06 100644
--- a/rtc_base/task_queue.h
+++ b/rtc_base/task_queue.h
@@ -20,7 +20,6 @@
 #include "api/task_queue/queued_task.h"
 #include "api/task_queue/task_queue_base.h"
 #include "api/task_queue/task_queue_factory.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 #include "rtc_base/task_utils/to_queued_task.h"
 #include "rtc_base/thread_annotations.h"
@@ -83,6 +82,9 @@
                                      webrtc::TaskQueueDeleter> task_queue);
   ~TaskQueue();
 
+  TaskQueue(const TaskQueue&) = delete;
+  TaskQueue& operator=(const TaskQueue&) = delete;
+
   // Used for DCHECKing the current queue.
   bool IsCurrent() const;
 
@@ -125,8 +127,6 @@
 
  private:
   webrtc::TaskQueueBase* const impl_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(TaskQueue);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/test_client.h b/rtc_base/test_client.h
index 6989fe1..dd91d37 100644
--- a/rtc_base/test_client.h
+++ b/rtc_base/test_client.h
@@ -15,7 +15,6 @@
 #include <vector>
 
 #include "rtc_base/async_udp_socket.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/fake_clock.h"
 #include "rtc_base/synchronization/mutex.h"
 
@@ -53,6 +52,9 @@
              ThreadProcessingFakeClock* fake_clock);
   ~TestClient() override;
 
+  TestClient(const TestClient&) = delete;
+  TestClient& operator=(const TestClient&) = delete;
+
   SocketAddress address() const { return socket_->GetLocalAddress(); }
   SocketAddress remote_address() const { return socket_->GetRemoteAddress(); }
 
@@ -110,7 +112,6 @@
   std::vector<std::unique_ptr<Packet>> packets_;
   int ready_to_send_count_ = 0;
   int64_t prev_packet_timestamp_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(TestClient);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/test_echo_server.h b/rtc_base/test_echo_server.h
index a061ed0..ba5f997 100644
--- a/rtc_base/test_echo_server.h
+++ b/rtc_base/test_echo_server.h
@@ -20,7 +20,6 @@
 #include "absl/algorithm/container.h"
 #include "rtc_base/async_packet_socket.h"
 #include "rtc_base/async_tcp_socket.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/socket.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
@@ -35,6 +34,9 @@
   TestEchoServer(Thread* thread, const SocketAddress& addr);
   ~TestEchoServer() override;
 
+  TestEchoServer(const TestEchoServer&) = delete;
+  TestEchoServer& operator=(const TestEchoServer&) = delete;
+
   SocketAddress address() const { return server_socket_->GetLocalAddress(); }
 
  private:
@@ -64,7 +66,6 @@
   typedef std::list<AsyncTCPSocket*> ClientList;
   std::unique_ptr<Socket> server_socket_;
   ClientList client_sockets_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(TestEchoServer);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/thread.cc b/rtc_base/thread.cc
index 46e082f..2a79d82 100644
--- a/rtc_base/thread.cc
+++ b/rtc_base/thread.cc
@@ -75,6 +75,9 @@
  public:
   MessageHandlerWithTask() {}
 
+  MessageHandlerWithTask(const MessageHandlerWithTask&) = delete;
+  MessageHandlerWithTask& operator=(const MessageHandlerWithTask&) = delete;
+
   void OnMessage(Message* msg) override {
     static_cast<rtc_thread_internal::MessageLikeTask*>(msg->pdata)->Run();
     delete msg->pdata;
@@ -82,8 +85,6 @@
 
  private:
   ~MessageHandlerWithTask() override {}
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(MessageHandlerWithTask);
 };
 
 class RTC_SCOPED_LOCKABLE MarkProcessingCritScope {
@@ -100,11 +101,12 @@
     cs_->Leave();
   }
 
+  MarkProcessingCritScope(const MarkProcessingCritScope&) = delete;
+  MarkProcessingCritScope& operator=(const MarkProcessingCritScope&) = delete;
+
  private:
   const RecursiveCriticalSection* const cs_;
   size_t* processing_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(MarkProcessingCritScope);
 };
 
 }  // namespace
diff --git a/rtc_base/thread.h b/rtc_base/thread.h
index 38e9732..70cafe0 100644
--- a/rtc_base/thread.h
+++ b/rtc_base/thread.h
@@ -29,7 +29,6 @@
 #include "api/task_queue/queued_task.h"
 #include "api/task_queue/task_queue_base.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/deprecated/recursive_critical_section.h"
 #include "rtc_base/location.h"
 #include "rtc_base/message_handler.h"
@@ -89,14 +88,15 @@
   explicit MessageWithFunctor(FunctorT&& functor)
       : functor_(std::forward<FunctorT>(functor)) {}
 
+  MessageWithFunctor(const MessageWithFunctor&) = delete;
+  MessageWithFunctor& operator=(const MessageWithFunctor&) = delete;
+
   void Run() override { functor_(); }
 
  private:
   ~MessageWithFunctor() override {}
 
   typename std::remove_reference<FunctorT>::type functor_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(MessageWithFunctor);
 };
 
 }  // namespace rtc_thread_internal
@@ -152,6 +152,9 @@
   ThreadManager();
   ~ThreadManager();
 
+  ThreadManager(const ThreadManager&) = delete;
+  ThreadManager& operator=(const ThreadManager&) = delete;
+
   void SetCurrentThreadInternal(Thread* thread);
   void AddInternal(Thread* message_queue);
   void RemoveInternal(Thread* message_queue);
@@ -186,8 +189,6 @@
 
   // The thread to potentially autowrap.
   const PlatformThreadRef main_thread_ref_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(ThreadManager);
 };
 
 // WARNING! SUBCLASSES MUST CALL Stop() IN THEIR DESTRUCTORS!  See ~Thread().
@@ -221,6 +222,9 @@
   // calling Clear on the object from a different thread.
   ~Thread() override;
 
+  Thread(const Thread&) = delete;
+  Thread& operator=(const Thread&) = delete;
+
   static std::unique_ptr<Thread> CreateWithSocketServer();
   static std::unique_ptr<Thread> Create();
   static Thread* Current();
@@ -685,8 +689,6 @@
   friend class ThreadManager;
 
   int dispatch_warning_ms_ RTC_GUARDED_BY(this) = kSlowDispatchLoggingThreshold;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(Thread);
 };
 
 // AutoThread automatically installs itself at construction
@@ -700,8 +702,8 @@
   AutoThread();
   ~AutoThread() override;
 
- private:
-  RTC_DISALLOW_COPY_AND_ASSIGN(AutoThread);
+  AutoThread(const AutoThread&) = delete;
+  AutoThread& operator=(const AutoThread&) = delete;
 };
 
 // AutoSocketServerThread automatically installs itself at
@@ -714,10 +716,11 @@
   explicit AutoSocketServerThread(SocketServer* ss);
   ~AutoSocketServerThread() override;
 
+  AutoSocketServerThread(const AutoSocketServerThread&) = delete;
+  AutoSocketServerThread& operator=(const AutoSocketServerThread&) = delete;
+
  private:
   rtc::Thread* old_thread_;
-
-  RTC_DISALLOW_COPY_AND_ASSIGN(AutoSocketServerThread);
 };
 }  // namespace rtc
 
diff --git a/rtc_base/thread_unittest.cc b/rtc_base/thread_unittest.cc
index 62f00ec..424210a 100644
--- a/rtc_base/thread_unittest.cc
+++ b/rtc_base/thread_unittest.cc
@@ -204,6 +204,10 @@
  public:
   explicit FunctorD(AtomicBool* flag) : flag_(flag) {}
   FunctorD(FunctorD&&) = default;
+
+  FunctorD(const FunctorD&) = delete;
+  FunctorD& operator=(const FunctorD&) = delete;
+
   FunctorD& operator=(FunctorD&&) = default;
   void operator()() {
     if (flag_)
@@ -212,7 +216,6 @@
 
  private:
   AtomicBool* flag_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(FunctorD);
 };
 
 // See: https://code.google.com/p/webrtc/issues/detail?id=2409
diff --git a/rtc_base/timestamp_aligner.h b/rtc_base/timestamp_aligner.h
index 73af9de..138e936 100644
--- a/rtc_base/timestamp_aligner.h
+++ b/rtc_base/timestamp_aligner.h
@@ -13,7 +13,6 @@
 
 #include <stdint.h>
 
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace rtc {
@@ -35,6 +34,9 @@
   TimestampAligner();
   ~TimestampAligner();
 
+  TimestampAligner(const TimestampAligner&) = delete;
+  TimestampAligner& operator=(const TimestampAligner&) = delete;
+
  public:
   // Translates timestamps of a capture system to the same timescale as is used
   // by rtc::TimeMicros(). `capturer_time_us` is assumed to be accurate, but
@@ -77,7 +79,6 @@
   // Offset between `prev_translated_time_us_` and the corresponding capturer
   // time.
   int64_t prev_time_offset_us_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(TimestampAligner);
 };
 
 }  // namespace rtc
diff --git a/rtc_base/virtual_socket_server.h b/rtc_base/virtual_socket_server.h
index 8873f18..b172567 100644
--- a/rtc_base/virtual_socket_server.h
+++ b/rtc_base/virtual_socket_server.h
@@ -16,7 +16,6 @@
 #include <vector>
 
 #include "rtc_base/checks.h"
-#include "rtc_base/constructor_magic.h"
 #include "rtc_base/event.h"
 #include "rtc_base/fake_clock.h"
 #include "rtc_base/message_handler.h"
@@ -163,6 +162,9 @@
   explicit VirtualSocketServer(ThreadProcessingFakeClock* fake_clock);
   ~VirtualSocketServer() override;
 
+  VirtualSocketServer(const VirtualSocketServer&) = delete;
+  VirtualSocketServer& operator=(const VirtualSocketServer&) = delete;
+
   // The default source address specifies which local address to use when a
   // socket is bound to the 'any' address, e.g. 0.0.0.0. (If not set, the 'any'
   // address is used as the source address on outgoing virtual packets, exposed
@@ -419,7 +421,6 @@
   size_t max_udp_payload_ RTC_GUARDED_BY(mutex_) = 65507;
 
   bool sending_blocked_ RTC_GUARDED_BY(mutex_) = false;
-  RTC_DISALLOW_COPY_AND_ASSIGN(VirtualSocketServer);
 };
 
 }  // namespace rtc
