qt6-bb10/tests/auto/corelib/tools
Jøger Hansegård 8d367dec15 Add QUniqueHandle - a general purpose RAII wrapper for non-memory types
When interfacing with C-style APIs, such as the Windows API, resources
are often represented using handle objects. Lifetime management of such
resources can be cumbersome and error prone, because typical handle
objects (ints) do not give any help to release resources, and to manage
ownership.

Although std::unique_ptr can be retro-fitted with a custom deleter, and
helps transfer of ownership, it is inherently a pointer type. It can
therefore be clumsy to use with C-style APIs, particularly if the
invalid (uninitialized) handle value is not a nullptr. Also, the
std::unique_ptr does not work well when an allocating function returns
the handle as a pointer argument.

The QUniqueHandle addresses these issues by providing a movable only
value type that is designed as a RAII handle wrapper.

A similar handle wrapper exists in the Windows SDK, as part of the WRL
library. Unfortunately, this is Microsoft specific, and is not supported
by MINGW.

Since the QUniqueHandle is platform independent, it can be used also
with non- Microsoft platforms, and can be useful with other C-style APIs
such as FFmpeg or SQLite.

Pick-to: 6.6 6.5
Change-Id: Ibfc0cec3f361ec004febea5f284ebf75e27c0054
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2023-11-15 05:01:51 +01:00
..
collections
containerapisymmetry
qalgorithms
qarraydata QArrayDataPointer: add an allocating constructor 2023-10-25 12:01:58 -07:00
qatomicscopedvaluerollback
qbitarray
qcache
qcommandlineparser QCommandLineParser: Warn invalid value calls 2023-09-21 22:05:06 +02:00
qcontiguouscache
qcryptographichash QCryptographicHash: fallback to non-OpenSSL implementation for Keccak 2023-11-08 18:40:14 +01:00
qduplicatetracker
qeasingcurve
qexplicitlyshareddatapointer
qflatmap
qfreelist
qhash
qhashfunctions tst_QHashFunctions: suppress warning about casting from float to _Float16 2023-10-24 08:44:36 -07:00
qhashseed
qline
qlist QArrayDataPointer: remove Q_CHECK_PTR in assign(it, it) again 2023-09-07 15:05:05 +02:00
qmacautoreleasepool
qmakearray
qmap
qmargins
qmessageauthenticationcode
qoffsetstringarray
qpair
qpoint
qpointf
qqueue
qrect
qringbuffer
qscopedpointer
qscopedvaluerollback
qscopeguard
qset
qsharedpointer QSP/QWP: introduce owner_before, owner_equal, owner_hash 2023-10-26 19:24:40 +02:00
qsize
qsizef
qspan QSpan: add C++23 c{,r}{begin,end}() 2023-10-12 21:38:54 +02:00
qstl
qtaggedpointer
qtimeline
quniquehandle Add QUniqueHandle - a general purpose RAII wrapper for non-memory types 2023-11-15 05:01:51 +01:00
qvarlengtharray
qversionnumber
CMakeLists.txt Add QUniqueHandle - a general purpose RAII wrapper for non-memory types 2023-11-15 05:01:51 +01:00