.. title:: clang-tidy - modernize-replace-disallow-copy-and-assign-macro
modernize-replace-disallow-copy-and-assign-macro
================================================
Finds macro expansions of ``DISALLOW_COPY_AND_ASSIGN(Type)`` and replaces them
with a deleted copy constructor and a deleted assignment operator.
Before the ``delete`` keyword was introduced in C++11 it was common practice to
declare a copy constructor and an assignment operator as private members. This
effectively makes them unusable to the public API of a class.
With the advent of the ``delete`` keyword in C++11 we can abandon the
``private`` access of the copy constructor and the assignment operator and
delete the methods entirely.
When running this check on a code like this:
.. code-block:: c++
class Foo {
private:
DISALLOW_COPY_AND_ASSIGN(Foo);
};
It will be transformed to this:
.. code-block:: c++
class Foo {
private:
Foo(const Foo &) = delete;
const Foo &operator=(const Foo &) = delete;
};
Known Limitations
-----------------
* Notice that the migration example above leaves the ``private`` access
specification untouched. You might want to run the check :doc:`modernize-use-equals-delete
<../modernize/use-equals-delete>` to get warnings for deleted functions in
private sections.
Options
-------
.. option:: MacroName
A string specifying the macro name whose expansion will be replaced.
Default is `DISALLOW_COPY_AND_ASSIGN`.
See: https://en.cppreference.com/w/cpp/language/function#Deleted_functions