diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index 8869aef..5a307c8 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -76,11 +76,6 @@
     This approach may be deprecated in the future.
 */
 class SK_API SkCanvas {
-    SkCanvas(SkCanvas&&) = delete;
-    SkCanvas(const SkCanvas&) = delete;
-    SkCanvas& operator=(SkCanvas&&) = delete;
-    SkCanvas& operator=(const SkCanvas&) = delete;
-
     enum PrivateSaveLayerFlags {
         kDontClipToLayer_PrivateSaveLayerFlag   = 1U << 31,
     };
@@ -2650,6 +2645,11 @@
     SkCanvas(const SkBitmap&, std::unique_ptr<SkRasterHandleAllocator>,
              SkRasterHandleAllocator::Handle);
 
+    SkCanvas(SkCanvas&&) = delete;
+    SkCanvas(const SkCanvas&) = delete;
+    SkCanvas& operator=(SkCanvas&&) = delete;
+    SkCanvas& operator=(const SkCanvas&) = delete;
+
     void resetForNextPicture(const SkIRect& bounds);
 
     // needs gettotalclip()
@@ -2710,10 +2710,6 @@
 
     class AutoValidateClip {
     public:
-        AutoValidateClip(AutoValidateClip&&) = delete;
-        AutoValidateClip(const AutoValidateClip&) = delete;
-        AutoValidateClip& operator=(AutoValidateClip&&) = delete;
-        AutoValidateClip& operator=(const AutoValidateClip&) = delete;
         explicit AutoValidateClip(SkCanvas* canvas) : fCanvas(canvas) {
             fCanvas->validateClip();
         }
@@ -2721,6 +2717,11 @@
 
     private:
         const SkCanvas* fCanvas;
+
+        AutoValidateClip(AutoValidateClip&&) = delete;
+        AutoValidateClip(const AutoValidateClip&) = delete;
+        AutoValidateClip& operator=(AutoValidateClip&&) = delete;
+        AutoValidateClip& operator=(const AutoValidateClip&) = delete;
     };
 
 #ifdef SK_DEBUG
@@ -2740,12 +2741,7 @@
     state.
 */
 class SkAutoCanvasRestore {
-    SkAutoCanvasRestore(SkAutoCanvasRestore&&) = delete;
-    SkAutoCanvasRestore(const SkAutoCanvasRestore&) = delete;
-    SkAutoCanvasRestore& operator=(SkAutoCanvasRestore&&) = delete;
-    SkAutoCanvasRestore& operator=(const SkAutoCanvasRestore&) = delete;
 public:
-
     /** Preserves SkCanvas save count. Optionally saves SkCanvas clip and SkCanvas matrix.
 
         @param canvas  SkCanvas to guard
@@ -2783,6 +2779,11 @@
 private:
     SkCanvas*   fCanvas;
     int         fSaveCount;
+
+    SkAutoCanvasRestore(SkAutoCanvasRestore&&) = delete;
+    SkAutoCanvasRestore(const SkAutoCanvasRestore&) = delete;
+    SkAutoCanvasRestore& operator=(SkAutoCanvasRestore&&) = delete;
+    SkAutoCanvasRestore& operator=(const SkAutoCanvasRestore&) = delete;
 };
 #define SkAutoCanvasRestore(...) SK_REQUIRE_LOCAL_VAR(SkAutoCanvasRestore)
 
diff --git a/include/core/SkImageGenerator.h b/include/core/SkImageGenerator.h
index 3e0d313..d4a79a2 100644
--- a/include/core/SkImageGenerator.h
+++ b/include/core/SkImageGenerator.h
@@ -26,11 +26,6 @@
 
 class SK_API SkImageGenerator {
 public:
-    SkImageGenerator(SkImageGenerator&&) = delete;
-    SkImageGenerator(const SkImageGenerator&) = delete;
-    SkImageGenerator& operator=(SkImageGenerator&&) = delete;
-    SkImageGenerator& operator=(const SkImageGenerator&) = delete;
-
     /**
      *  The PixelRef which takes ownership of this SkImageGenerator
      *  will call the image generator's destructor.
@@ -208,6 +203,11 @@
     // It is called from NewFromEncoded() after it has checked for any runtime factory.
     // The SkData will never be NULL, as that will have been checked by NewFromEncoded.
     static std::unique_ptr<SkImageGenerator> MakeFromEncodedImpl(sk_sp<SkData>);
+
+    SkImageGenerator(SkImageGenerator&&) = delete;
+    SkImageGenerator(const SkImageGenerator&) = delete;
+    SkImageGenerator& operator=(SkImageGenerator&&) = delete;
+    SkImageGenerator& operator=(const SkImageGenerator&) = delete;
 };
 
 #endif  // SkImageGenerator_DEFINED
diff --git a/include/core/SkRefCnt.h b/include/core/SkRefCnt.h
index 89e6544..d4107b8 100644
--- a/include/core/SkRefCnt.h
+++ b/include/core/SkRefCnt.h
@@ -36,10 +36,6 @@
     /** Default construct, initializing the reference count to 1.
     */
     SkRefCntBase() : fRefCnt(1) {}
-    SkRefCntBase(SkRefCntBase&&) = delete;
-    SkRefCntBase(const SkRefCntBase&) = delete;
-    SkRefCntBase& operator=(SkRefCntBase&&) = delete;
-    SkRefCntBase& operator=(const SkRefCntBase&) = delete;
 
     /** Destruct, asserting that the reference count is 1.
     */
@@ -122,6 +118,11 @@
     friend class SkWeakRefCnt;
 
     mutable std::atomic<int32_t> fRefCnt;
+
+    SkRefCntBase(SkRefCntBase&&) = delete;
+    SkRefCntBase(const SkRefCntBase&) = delete;
+    SkRefCntBase& operator=(SkRefCntBase&&) = delete;
+    SkRefCntBase& operator=(const SkRefCntBase&) = delete;
 };
 
 #ifdef SK_REF_CNT_MIXIN_INCLUDE
@@ -217,10 +218,6 @@
 public:
     SkNVRefCnt() : fRefCnt(1) {}
     ~SkNVRefCnt() { SkASSERTF(1 == getRefCnt(), "NVRefCnt was %d", getRefCnt()); }
-    SkNVRefCnt(SkNVRefCnt&&) = delete;
-    SkNVRefCnt(const SkNVRefCnt&) = delete;
-    SkNVRefCnt& operator=(SkNVRefCnt&&) = delete;
-    SkNVRefCnt& operator=(const SkNVRefCnt&) = delete;
 
     // Implementation is pretty much the same as SkRefCntBase. All required barriers are the same:
     //   - unique() needs acquire when it returns true, and no barrier if it returns false;
@@ -243,6 +240,11 @@
     int32_t getRefCnt() const {
         return fRefCnt.load(std::memory_order_relaxed);
     }
+
+    SkNVRefCnt(SkNVRefCnt&&) = delete;
+    SkNVRefCnt(const SkNVRefCnt&) = delete;
+    SkNVRefCnt& operator=(SkNVRefCnt&&) = delete;
+    SkNVRefCnt& operator=(const SkNVRefCnt&) = delete;
 };
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/include/core/SkStream.h b/include/core/SkStream.h
index 0c6ce0b..884e595 100644
--- a/include/core/SkStream.h
+++ b/include/core/SkStream.h
@@ -42,10 +42,6 @@
 public:
     virtual ~SkStream() {}
     SkStream() {}
-    SkStream(SkStream&&) = delete;
-    SkStream(const SkStream&) = delete;
-    SkStream& operator=(SkStream&&) = delete;
-    SkStream& operator=(const SkStream&) = delete;
 
     /**
      *  Attempts to open the specified file as a stream, returns nullptr on failure.
@@ -157,6 +153,11 @@
 private:
     virtual SkStream* onDuplicate() const { return nullptr; }
     virtual SkStream* onFork() const { return nullptr; }
+
+    SkStream(SkStream&&) = delete;
+    SkStream(const SkStream&) = delete;
+    SkStream& operator=(SkStream&&) = delete;
+    SkStream& operator=(const SkStream&) = delete;
 };
 
 /** SkStreamRewindable is a SkStream for which rewind and duplicate are required. */
@@ -227,10 +228,6 @@
 public:
     virtual ~SkWStream();
     SkWStream() {}
-    SkWStream(SkWStream&&) = delete;
-    SkWStream(const SkWStream&) = delete;
-    SkWStream& operator=(SkWStream&&) = delete;
-    SkWStream& operator=(const SkWStream&) = delete;
 
     /** Called to write bytes to a SkWStream. Returns true on success
         @param buffer the address of at least size bytes to be written to the stream
@@ -279,6 +276,12 @@
      * 'value'.
      */
     static int SizeOfPackedUInt(size_t value);
+
+private:
+    SkWStream(SkWStream&&) = delete;
+    SkWStream(const SkWStream&) = delete;
+    SkWStream& operator=(SkWStream&&) = delete;
+    SkWStream& operator=(const SkWStream&) = delete;
 };
 
 class SK_API SkNullWStream : public SkWStream {
diff --git a/include/private/SkTHash.h b/include/private/SkTHash.h
index 06e63a2..43234c5 100644
--- a/include/private/SkTHash.h
+++ b/include/private/SkTHash.h
@@ -39,9 +39,6 @@
         return *this;
     }
 
-    SkTHashTable(const SkTHashTable&) = delete;
-    SkTHashTable& operator=(const SkTHashTable&) = delete;
-
     // Clear the table.
     void reset() { *this = SkTHashTable(); }
 
@@ -227,6 +224,9 @@
 
     int fCount, fCapacity;
     SkAutoTArray<Slot> fSlots;
+
+    SkTHashTable(const SkTHashTable&) = delete;
+    SkTHashTable& operator=(const SkTHashTable&) = delete;
 };
 
 // Maps K->V.  A more user-friendly wrapper around SkTHashTable, suitable for most use cases.
@@ -236,9 +236,7 @@
 public:
     SkTHashMap() {}
     SkTHashMap(SkTHashMap&&) = default;
-    SkTHashMap(const SkTHashMap&) = delete;
     SkTHashMap& operator=(SkTHashMap&&) = default;
-    SkTHashMap& operator=(const SkTHashMap&) = delete;
 
     // Clear the map.
     void reset() { fTable.reset(); }
@@ -294,6 +292,9 @@
     };
 
     SkTHashTable<Pair, K> fTable;
+
+    SkTHashMap(const SkTHashMap&) = delete;
+    SkTHashMap& operator=(const SkTHashMap&) = delete;
 };
 
 // A set of T.  T is treated as an ordinary copyable C++ type.
@@ -302,9 +303,7 @@
 public:
     SkTHashSet() {}
     SkTHashSet(SkTHashSet&&) = default;
-    SkTHashSet(const SkTHashSet&) = delete;
     SkTHashSet& operator=(SkTHashSet&&) = default;
-    SkTHashSet& operator=(const SkTHashSet&) = delete;
 
     // Clear the set.
     void reset() { fTable.reset(); }
@@ -343,6 +342,9 @@
         static uint32_t Hash(const T& item) { return HashT()(item); }
     };
     SkTHashTable<T, T, Traits> fTable;
+
+    SkTHashSet(const SkTHashSet&) = delete;
+    SkTHashSet& operator=(const SkTHashSet&) = delete;
 };
 
 #endif//SkTHash_DEFINED
