Index: base/move.h |
diff --git a/base/move.h b/base/move.h |
index 6743eb71667c7651ccb7c9571f3a0dce13732d41..91c91df6728d32a9ce4095962421caf931819da6 100644 |
--- a/base/move.h |
+++ b/base/move.h |
@@ -9,50 +9,27 @@ |
#include "base/compiler_specific.h" |
-// Macro with the boilerplate that makes a type move-only in C++11. |
-// |
-// USAGE |
-// |
-// This macro should be used instead of DISALLOW_COPY_AND_ASSIGN to create |
-// a "move-only" type. Unlike DISALLOW_COPY_AND_ASSIGN, this macro should be |
-// the first line in a class declaration. |
-// |
-// A class using this macro must call .Pass() (or somehow be an r-value already) |
-// before it can be: |
-// |
-// * Passed as a function argument |
-// * Used as the right-hand side of an assignment |
-// * Returned from a function |
-// |
-// Each class will still need to define their own move constructor and move |
-// operator= to make this useful. Here's an example of the macro, the move |
-// constructor, and the move operator= from a hypothetical scoped_ptr class: |
-// |
-// template <typename T> |
-// class scoped_ptr { |
-// MOVE_ONLY_TYPE_WITH_MOVE_CONSTRUCTOR_FOR_CPP_03(type); |
-// public: |
-// scoped_ptr(scoped_ptr&& other) : ptr_(other.release()) { } |
-// scoped_ptr& operator=(scoped_ptr&& other) { |
-// reset(other.release()); |
-// return *this; |
-// } |
-// }; |
-// |
+// TODO(crbug.com/566182): DEPRECATED! |
+// Use DISALLOW_COPY_AND_ASSIGN instead, or if your type will be used in |
+// Callbacks, use DISALLOW_COPY_AND_ASSIGN_WITH_MOVE_FOR_BIND instead. |
+#define MOVE_ONLY_TYPE_FOR_CPP_03(type) \ |
+ DISALLOW_COPY_AND_ASSIGN_WITH_MOVE_FOR_BIND(type) |
+ |
+// A macro to disallow the copy constructor and copy assignment functions. |
+// This should be used in the private: declarations for a class. |
// |
-// WHY HAVE typedef void MoveOnlyTypeForCPP03 |
+// Use this macro instead of DISALLOW_COPY_AND_ASSIGN if you want to pass |
+// ownership of the type through a base::Callback without heap-allocating it |
+// into a scoped_ptr. The class must define a move constructor and move |
+// assignment operator to make this work. |
// |
-// Callback<>/Bind() needs to understand movable-but-not-copyable semantics |
-// to call .Pass() appropriately when it is expected to transfer the value. |
-// The cryptic typedef MoveOnlyTypeForCPP03 is added to make this check |
-// easy and automatic in helper templates for Callback<>/Bind(). |
+// This version of the macro adds a Pass() function and a cryptic |
+// MoveOnlyTypeForCPP03 typedef for the base::Callback implementation to use. |
// See IsMoveOnlyType template and its usage in base/callback_internal.h |
// for more details. |
- |
-#define MOVE_ONLY_TYPE_FOR_CPP_03(type) \ |
- MOVE_ONLY_TYPE_WITH_MOVE_CONSTRUCTOR_FOR_CPP_03(type) |
- |
-#define MOVE_ONLY_TYPE_WITH_MOVE_CONSTRUCTOR_FOR_CPP_03(type) \ |
+// TODO(crbug.com/566182): Remove this macro and use DISALLOW_COPY_AND_ASSIGN |
+// everywhere instead. |
+#define DISALLOW_COPY_AND_ASSIGN_WITH_MOVE_FOR_BIND(type) \ |
private: \ |
type(const type&) = delete; \ |
void operator=(const type&) = delete; \ |