Long live Q_DISABLE_COPY_MOVE!

When using Q_DISABLE_COPY, clang-tidy reports:

warning: class 'Foo' defines a non-default destructor, a copy constructor
and a copy assignment operator but does not define a move constructor or a
move assignment operator [cppcoreguidelines-special-member-functions]

Add convenience macros to suppress move constructor/assignment
as well.

[ChangeLog][QtCore] Added macros Q_DISABLE_MOVE and Q_DISABLE_COPY_MOVE
complementing Q_DISABLE_COPY.

Change-Id: I0b07495ef4ef06c714f7368c706168613c3fe7bc
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
Friedemann Kleint 2018-07-20 09:32:05 +02:00
parent 079df681ec
commit 27f08ab494
2 changed files with 33 additions and 0 deletions

View File

@ -525,6 +525,31 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
made private. In that case, no error would be reported, but your
application would probably crash when you called a member function
of \c{w}.
\sa Q_DISABLE_COPY_MOVE, Q_DISABLE_MOVE
*/
/*!
\macro Q_DISABLE_MOVE(Class)
\relates QObject
Disables the use of move constructors and move assignment operators
for the given \a Class.
\sa Q_DISABLE_COPY, Q_DISABLE_COPY_MOVE
\since 5.13
*/
/*!
\macro Q_DISABLE_COPY_MOVE(Class)
\relates QObject
A convenience macro that disables the use of copy constructors, assignment
operators, move constructors and move assignment operators for the given
\a Class, combining Q_DISABLE_COPY and Q_DISABLE_MOVE.
\sa Q_DISABLE_COPY, Q_DISABLE_MOVE
\since 5.13
*/
/*!

View File

@ -372,6 +372,14 @@ typedef double qreal;
Class(const Class &) Q_DECL_EQ_DELETE;\
Class &operator=(const Class &) Q_DECL_EQ_DELETE;
#define Q_DISABLE_MOVE(Class) \
Class(Class &&) = delete; \
Class &operator=(Class &&) = delete;
#define Q_DISABLE_COPY_MOVE(Class) \
Q_DISABLE_COPY(Class) \
Q_DISABLE_MOVE(Class)
/*
No, this is not an evil backdoor. QT_BUILD_INTERNAL just exports more symbols
for Qt's internal unit tests. If you want slower loading times and more