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:
parent
079df681ec
commit
27f08ab494
@ -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
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user