QAFileEngine: let Private take charge of setting its own q_ptr

The QAFE was always setting the q_ptr of the Private just after it was
constructed, but it wasn't immediately obvious the QAFE(Private &)
constructor wasn't stealing its d_ptr of some other QAFE by
overwriting the q_ptr. Passing the file engine's this to the Private's
constructor makes it all unambiguous and incidentally makes it
possible to make clear that q_ptr is in fact const. Fixes a static
analyzer's grumble about Private's constructor not setting q_ptr.

Task-number: QTBUG-122619
Change-Id: Id532bbe628651ad691b7c4b058e01c5cc2e6e241
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
This commit is contained in:
Edward Welbourne 2024-04-08 18:28:39 +02:00
parent 3ab18f4021
commit 7551482205
5 changed files with 14 additions and 11 deletions

View File

@ -318,9 +318,8 @@ std::unique_ptr<QAbstractFileEngine> QAbstractFileEngine::create(const QString &
\sa setFileName()
*/
QAbstractFileEngine::QAbstractFileEngine() : d_ptr(new QAbstractFileEnginePrivate)
QAbstractFileEngine::QAbstractFileEngine() : d_ptr(new QAbstractFileEnginePrivate(this))
{
d_ptr->q_ptr = this;
}
/*!
@ -330,7 +329,7 @@ QAbstractFileEngine::QAbstractFileEngine() : d_ptr(new QAbstractFileEnginePrivat
*/
QAbstractFileEngine::QAbstractFileEngine(QAbstractFileEnginePrivate &dd) : d_ptr(&dd)
{
d_ptr->q_ptr = this;
Q_ASSERT(d_ptr->q_ptr == this);
}
/*!

View File

@ -242,8 +242,8 @@ private:
class QAbstractFileEnginePrivate
{
public:
inline QAbstractFileEnginePrivate()
: fileError(QFile::UnspecifiedError)
inline QAbstractFileEnginePrivate(QAbstractFileEngine *q)
: fileError(QFile::UnspecifiedError), q_ptr(q)
{
}
inline virtual ~QAbstractFileEnginePrivate() { }
@ -251,7 +251,7 @@ public:
QFile::FileError fileError;
QString errorString;
QAbstractFileEngine *q_ptr;
QAbstractFileEngine *const q_ptr;
Q_DECLARE_PUBLIC(QAbstractFileEngine)
};

View File

@ -76,7 +76,8 @@ static_assert(sizeof(SignedIOType) == sizeof(UnsignedIOType),
*/
//**************** QFSFileEnginePrivate
QFSFileEnginePrivate::QFSFileEnginePrivate() : QAbstractFileEnginePrivate()
QFSFileEnginePrivate::QFSFileEnginePrivate(QAbstractFileEngine *q)
: QAbstractFileEnginePrivate(q)
{
init();
}
@ -108,7 +109,7 @@ void QFSFileEnginePrivate::init()
Constructs a QFSFileEngine for the file name \a file.
*/
QFSFileEngine::QFSFileEngine(const QString &file)
: QAbstractFileEngine(*new QFSFileEnginePrivate)
: QAbstractFileEngine(*new QFSFileEnginePrivate(this))
{
Q_D(QFSFileEngine);
d->fileEntry = QFileSystemEntry(file);
@ -117,7 +118,7 @@ QFSFileEngine::QFSFileEngine(const QString &file)
/*!
Constructs a QFSFileEngine.
*/
QFSFileEngine::QFSFileEngine() : QAbstractFileEngine(*new QFSFileEnginePrivate)
QFSFileEngine::QFSFileEngine() : QAbstractFileEngine(*new QFSFileEnginePrivate(this))
{
}

View File

@ -222,7 +222,7 @@ public:
return (openMode & QFile::WriteOnly) && !(openMode & QFile::ExistingOnly);
}
protected:
QFSFileEnginePrivate();
QFSFileEnginePrivate(QAbstractFileEngine *q);
void init();

View File

@ -1397,6 +1397,9 @@ private:
// minimum size for which we'll try to re-open ourselves in mapUncompressed()
static constexpr qsizetype RemapCompressedThreshold = 16384;
protected:
QResourceFileEnginePrivate(QAbstractFileEngine *q) :
QAbstractFileEnginePrivate(q) {}
~QResourceFileEnginePrivate()
{
if (mustUnmap)
@ -1410,7 +1413,7 @@ bool QResourceFileEngine::caseSensitive() const
}
QResourceFileEngine::QResourceFileEngine(const QString &file) :
QAbstractFileEngine(*new QResourceFileEnginePrivate)
QAbstractFileEngine(*new QResourceFileEnginePrivate(this))
{
Q_D(QResourceFileEngine);
d->resource.setFileName(file);